diff --git a/assets/XRPL_Brand_Kit.zip b/assets/XRPL_Brand_Kit.zip new file mode 100644 index 0000000000..cd43964f2b Binary files /dev/null and b/assets/XRPL_Brand_Kit.zip differ diff --git a/assets/css/devportal2022-v25.css b/assets/css/devportal2022-v25.css index 28d523ea76..d16055c0b2 100644 --- a/assets/css/devportal2022-v25.css +++ b/assets/css/devportal2022-v25.css @@ -3,4 +3,4 @@ * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root{--blue: #19A3FF;--indigo: #6610f2;--purple: #9A52FF;--pink: #FF198B;--red: #dc3545;--orange: #FF6719;--yellow: #FAFF19;--green: #32E685;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #454549;--gray-dark: #232325;--primary: #9A52FF;--secondary: #E0E0E1;--success: #32E685;--info: #19A3FF;--warning: #FAFF19;--danger: #FF198B;--light: #fff;--dark: #111112;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-family-monospace: "Space Mono", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#E0E0E1;text-align:left;background-color:#111112}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#fff;text-decoration:none;background-color:transparent}a:hover{color:#9A52FF;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:"Space Mono",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#E0E0E1;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2;color:#fff}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:.875em;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:.875em;color:#454549}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#111112;border:1px solid #C1C1C2;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.075);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#454549}code{font-size:87.5%;color:#E0E0E1;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#111112;border-radius:4px;box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;font-size:87.5%;color:#111112}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container,.container-sm{max-width:540px}}@media (min-width: 768px){.container,.container-sm,.container-md{max-width:720px}}@media (min-width: 992px){.container,.container-sm,.container-md,.container-lg{max-width:960px}}@media (min-width: 1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#E0E0E1}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #C1C1C2}.table thead th{vertical-align:bottom;border-bottom:2px solid #C1C1C2}.table tbody+tbody{border-top:2px solid #C1C1C2}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #C1C1C2}.table-bordered th,.table-bordered td{border:1px solid #C1C1C2}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{color:#E0E0E1;background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#e3cfff}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#caa5ff}.table-hover .table-primary:hover{background-color:#d4b6ff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#d4b6ff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f6f6f7}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#efefef}.table-hover .table-secondary:hover{background-color:#e9e9eb}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e9e9eb}.table-success,.table-success>th,.table-success>td{background-color:#c6f8dd}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#94f2c0}.table-hover .table-success:hover{background-color:#aff5cf}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aff5cf}.table-info,.table-info>th,.table-info>td{background-color:#bfe5ff}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#87cfff}.table-hover .table-info:hover{background-color:#a6dbff}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#a6dbff}.table-warning,.table-warning>th,.table-warning>td{background-color:#feffbf}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#fcff87}.table-hover .table-warning:hover{background-color:#feffa6}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#feffa6}.table-danger,.table-danger>th,.table-danger>td{background-color:#ffbfdf}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#ff87c3}.table-hover .table-danger:hover{background-color:#ffa6d2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ffa6d2}.table-light,.table-light>th,.table-light>td{background-color:#fff}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fff}.table-hover .table-light:hover{background-color:#f2f2f2}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f2f2f2}.table-dark,.table-dark>th,.table-dark>td{background-color:#bcbcbd}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#838384}.table-hover .table-dark:hover{background-color:#afafb0}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#afafb0}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#232325;border-color:#363639}.table .thead-light th{color:#343437;background-color:#E0E0E1;border-color:#C1C1C2}.table-dark{color:#fff;background-color:#232325}.table-dark th,.table-dark td,.table-dark thead th{border-color:#363639}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.25em + 2rem + 2px);padding:1rem 1.5rem;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;background-color:#232325;background-clip:padding-box;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:none;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#fff;background-color:#232325;border-color:#e4d2ff;outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.form-control::placeholder{color:#A2A2A4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#454549;opacity:1}input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select.form-control:focus::-ms-value{color:#fff;background-color:#232325}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:1rem 0;margin-bottom:0;font-size:1rem;line-height:1.25;color:#E0E0E1;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled] ~ .form-check-label,.form-check-input:disabled ~ .form-check-label{color:#E0E0E1}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#32E685}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#111112;background-color:rgba(50,230,133,0.9);border-radius:4px}.form-row>.col>.valid-tooltip,.form-row>[class*="col-"]>.valid-tooltip{left:5px}.was-validated :valid ~ .valid-feedback,.was-validated :valid ~ .valid-tooltip,.is-valid ~ .valid-feedback,.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#32E685;padding-right:calc(1.25em + 2rem) !important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2332E685' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3125em + .5rem) center;background-size:calc(.625em + 1rem) calc(.625em + 1rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated select.form-control:valid,select.form-control.is-valid{padding-right:6rem !important;background-position:right 3rem center}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 2rem);background-position:top calc(.3125em + .5rem) right calc(.3125em + .5rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#32E685;padding-right:calc(.75em + 4rem) !important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat,#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2332E685' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 2.5rem/calc(.625em + 1rem) calc(.625em + 1rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#32E685}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#32E685}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#32E685}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#5feca0;background-color:#5feca0}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#32E685}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#32E685}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#FF198B}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(255,25,139,0.9);border-radius:4px}.form-row>.col>.invalid-tooltip,.form-row>[class*="col-"]>.invalid-tooltip{left:5px}.was-validated :invalid ~ .invalid-feedback,.was-validated :invalid ~ .invalid-tooltip,.is-invalid ~ .invalid-feedback,.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#FF198B;padding-right:calc(1.25em + 2rem) !important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23FF198B' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23FF198B' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3125em + .5rem) center;background-size:calc(.625em + 1rem) calc(.625em + 1rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{padding-right:6rem !important;background-position:right 3rem center}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 2rem);background-position:top calc(.3125em + .5rem) right calc(.3125em + .5rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#FF198B;padding-right:calc(.75em + 4rem) !important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat,#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23FF198B' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23FF198B' stroke='none'/%3e%3c/svg%3e") center right 2.5rem/calc(.625em + 1rem) calc(.625em + 1rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#FF198B}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#FF198B}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#FF198B}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#ff4ca5;background-color:#ff4ca5}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#FF198B}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#FF198B}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#E0E0E1;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:1rem 1.5rem;font-size:.875rem;line-height:1.25;border-radius:4px;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#E0E0E1;text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:none}.btn.disabled,.btn:disabled{opacity:.65;box-shadow:none}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{box-shadow:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#9A52FF;border-color:#9A52FF;box-shadow:none}.btn-primary:hover{color:#fff;background-color:#842cff;border-color:#7c1fff}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#842cff;border-color:#7c1fff;box-shadow:0 0 0 .2rem rgba(169,108,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#7c1fff;border-color:#7512ff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(169,108,255,0.5)}.btn-secondary{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1;box-shadow:none}.btn-secondary:hover{color:#111112;background-color:#cdcdce;border-color:#c6c6c8}.btn-secondary:focus,.btn-secondary.focus{color:#111112;background-color:#cdcdce;border-color:#c6c6c8;box-shadow:0 0 0 .2rem rgba(193,193,194,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#111112;background-color:#c6c6c8;border-color:#c0c0c2}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(193,193,194,0.5)}.btn-success{color:#111112;background-color:#32E685;border-color:#32E685;box-shadow:none}.btn-success:hover{color:#fff;background-color:#1ad772;border-color:#19cc6c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1ad772;border-color:#19cc6c;box-shadow:0 0 0 .2rem rgba(45,198,116,0.5)}.btn-success.disabled,.btn-success:disabled{color:#111112;background-color:#32E685;border-color:#32E685}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#19cc6c;border-color:#18c166}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(45,198,116,0.5)}.btn-info{color:#fff;background-color:#19A3FF;border-color:#19A3FF;box-shadow:none}.btn-info:hover{color:#fff;background-color:#0091f2;border-color:#0089e5}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#0091f2;border-color:#0089e5;box-shadow:0 0 0 .2rem rgba(60,177,255,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#0089e5;border-color:#0082d8}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,177,255,0.5)}.btn-warning{color:#111112;background-color:#FAFF19;border-color:#FAFF19;box-shadow:none}.btn-warning:hover{color:#111112;background-color:#ecf200;border-color:#e0e500}.btn-warning:focus,.btn-warning.focus{color:#111112;background-color:#ecf200;border-color:#e0e500;box-shadow:0 0 0 .2rem rgba(215,219,24,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#111112;background-color:#e0e500;border-color:#d4d800}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(215,219,24,0.5)}.btn-danger{color:#fff;background-color:#FF198B;border-color:#FF198B;box-shadow:none}.btn-danger:hover{color:#fff;background-color:#f20078;border-color:#e50072}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#f20078;border-color:#e50072;box-shadow:0 0 0 .2rem rgba(255,60,156,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e50072;border-color:#d8006b}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,60,156,0.5)}.btn-light{color:#111112;background-color:#fff;border-color:#fff;box-shadow:none}.btn-light:hover{color:#111112;background-color:#ececec;border-color:#e6e6e6}.btn-light:focus,.btn-light.focus{color:#111112;background-color:#ececec;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(219,219,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#111112;background-color:#fff;border-color:#fff}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#111112;background-color:#e6e6e6;border-color:#dfdfdf}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(219,219,219,0.5)}.btn-dark{color:#fff;background-color:#111112;border-color:#111112;box-shadow:none}.btn-dark:hover{color:#fff;background-color:#000;border-color:#000}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#000;border-color:#000;box-shadow:0 0 0 .2rem rgba(53,53,54,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#111112;border-color:#111112}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(53,53,54,0.5)}.btn-outline-primary{color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:hover{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#9A52FF;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.btn-outline-secondary{color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:hover{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#E0E0E1;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.btn-outline-success{color:#32E685;border-color:#32E685}.btn-outline-success:hover{color:#111112;background-color:#32E685;border-color:#32E685}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#32E685;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#111112;background-color:#32E685;border-color:#32E685}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.btn-outline-info{color:#19A3FF;border-color:#19A3FF}.btn-outline-info:hover{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#19A3FF;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.btn-outline-warning{color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:hover{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#FAFF19;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.btn-outline-danger{color:#FF198B;border-color:#FF198B}.btn-outline-danger:hover{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#FF198B;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.btn-outline-light{color:#fff;border-color:#fff}.btn-outline-light:hover{color:#111112;background-color:#fff;border-color:#fff}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#fff;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#111112;background-color:#fff;border-color:#fff}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-outline-dark{color:#111112;border-color:#111112}.btn-outline-dark:hover{color:#fff;background-color:#111112;border-color:#111112}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#111112;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#111112;border-color:#111112}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.btn-link{font-weight:400;color:#fff;text-decoration:none}.btn-link:hover{color:#9A52FF;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#454549;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.width{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.width{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#E0E0E1;text-align:left;list-style:none;background-color:#111112;background-clip:padding-box;border:1px solid #111112;border-radius:4px;box-shadow:0px 5px 40px #000}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:0;border-right:.4em solid transparent;border-bottom:.4em solid;border-left:.4em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid transparent;border-right:0;border-bottom:.4em solid transparent;border-left:.4em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.34em;vertical-align:.34em;content:"";border-top:.4em solid transparent;border-right:.4em solid;border-bottom:.4em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #000}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#fff;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#9A52FF;text-decoration:none;background-color:#111112}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:rgba(0,0,0,0)}.dropdown-item.disabled,.dropdown-item:disabled{color:#838386;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#454549;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:none}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:1rem 1.5rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;text-align:center;white-space:nowrap;background-color:#454549;border:1px solid rgba(0,0,0,0);border-radius:4px}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:2.5rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;print-color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#9A52FF;background-color:#9A52FF;box-shadow:}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:none,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#e4d2ff}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#fff;border-color:#fff;box-shadow:}.custom-control-input[disabled] ~ .custom-control-label,.custom-control-input:disabled ~ .custom-control-label{color:#454549}.custom-control-input[disabled] ~ .custom-control-label::before,.custom-control-input:disabled ~ .custom-control-label::before{background-color:#454549}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#232325;border:1px solid #838386;box-shadow:none}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50% / 50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:4px}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#9A52FF;background-color:#9A52FF;box-shadow:}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#838386;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#232325;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem 1rem 1.5rem;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;vertical-align:middle;background:#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075);appearance:none}.custom-select:focus{border-color:#e4d2ff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 0 .2rem rgba(154,82,255,0.25)}.custom-select:focus::-ms-value{color:#fff;background-color:#232325}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:1.5rem;background-image:none}.custom-select:disabled{color:#454549;background-color:#E0E0E1}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.25em + 2rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.25em + 2rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#e4d2ff;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.custom-file-input[disabled] ~ .custom-file-label,.custom-file-input:disabled ~ .custom-file-label{background-color:#454549}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.25em + 2rem + 2px);padding:1rem 1.5rem;overflow:hidden;font-weight:400;line-height:1.25;color:#fff;background-color:#232325;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:none}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.25em + 2rem);padding:1rem 1.5rem;line-height:1.25;color:#fff;content:"Browse";background-color:#454549;border-left:inherit;border-radius:0 4px 4px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#C1C1C2;border-color:transparent;border-radius:1rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#C1C1C2;border-color:transparent;border-radius:1rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-ms-fill-lower{background-color:#C1C1C2;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#C1C1C2;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#838386}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#838386}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#838386}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:1rem 2rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#454549;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #C1C1C2}.nav-tabs .nav-link{margin-bottom:-1px;background-color:transparent;border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:#E0E0E1 #E0E0E1 #C1C1C2}.nav-tabs .nav-link.disabled{color:#454549;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#343437;background-color:#111112;border-color:#C1C1C2 #C1C1C2 #111112}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#9A52FF}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:1.25rem;padding-bottom:1.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:1rem;padding-bottom:1rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50% / 100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:#454549}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:#454549;border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='%23454549' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#454549}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#9A52FF}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:#fff;border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='%23fff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:#fff}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#232325;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:8px}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:7px;border-top-right-radius:7px}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:7px;border-bottom-left-radius:7px}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:2rem}.card-title{margin-bottom:2rem}.card-subtitle{margin-top:-1rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:2rem 2rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:7px 7px 0 0}.card-footer{padding:2rem 2rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 7px 7px}.card-header-tabs{margin-right:-1rem;margin-bottom:-2rem;margin-left:-1rem;border-bottom:0}.card-header-pills{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:7px}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:7px;border-top-right-radius:7px}.card-img,.card-img-bottom{border-bottom-right-radius:7px;border-bottom-left-radius:7px}.card-deck .card{margin-bottom:1.25rem}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-1.25rem;margin-left:-1.25rem}.card-deck .card{flex:1 0 0%;margin-right:1.25rem;margin-bottom:0;margin-left:1.25rem}}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:2rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:2rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#111112;border-radius:4px}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#454549;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#A2A2A4}.pagination{display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#fff;background-color:#fff;border:1px solid #C1C1C2}.page-link:hover{z-index:2;color:#9A52FF;text-decoration:none;background-color:#E0E0E1;border-color:#C1C1C2}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#9A52FF;border-color:#9A52FF}.page-item.disabled .page-link{color:#454549;pointer-events:none;cursor:auto;background-color:#fff;border-color:#C1C1C2}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:4px;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#9A52FF}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#7c1fff}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.badge-secondary{color:#111112;background-color:#E0E0E1}a.badge-secondary:hover,a.badge-secondary:focus{color:#111112;background-color:#c6c6c8}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.badge-success{color:#111112;background-color:#32E685}a.badge-success:hover,a.badge-success:focus{color:#111112;background-color:#19cc6c}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.badge-info{color:#fff;background-color:#19A3FF}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#0089e5}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.badge-warning{color:#111112;background-color:#FAFF19}a.badge-warning:hover,a.badge-warning:focus{color:#111112;background-color:#e0e500}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.badge-danger{color:#fff;background-color:#FF198B}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#e50072}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.badge-light{color:#111112;background-color:#fff}a.badge-light:hover,a.badge-light:focus{color:#111112;background-color:#e6e6e6}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.badge-dark{color:#fff;background-color:#111112}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#000}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#E0E0E1;border-radius:8px}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:4px}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#502b85;background-color:#ebdcff;border-color:#e3cfff}.alert-primary hr{border-top-color:#d4b6ff}.alert-primary .alert-link{color:#391f5e}.alert-secondary{color:#747475;background-color:#f9f9f9;border-color:#f6f6f7}.alert-secondary hr{border-top-color:#e9e9eb}.alert-secondary .alert-link{color:#5b5b5b}.alert-success{color:#1a7845;background-color:#d6fae7;border-color:#c6f8dd}.alert-success hr{border-top-color:#aff5cf}.alert-success .alert-link{color:#114e2d}.alert-info{color:#0d5585;background-color:#d1edff;border-color:#bfe5ff}.alert-info hr{border-top-color:#a6dbff}.alert-info .alert-link{color:#083757}.alert-warning{color:#82850d;background-color:#feffd1;border-color:#feffbf}.alert-warning hr{border-top-color:#feffa6}.alert-warning .alert-link{color:#555708}.alert-danger{color:#850d48;background-color:#ffd1e8;border-color:#ffbfdf}.alert-danger hr{border-top-color:#ffa6d2}.alert-danger .alert-link{color:#57082f}.alert-light{color:#858585;background-color:#fff;border-color:#fff}.alert-light hr{border-top-color:#f2f2f2}.alert-light .alert-link{color:#6c6c6c}.alert-dark{color:#090909;background-color:#cfcfd0;border-color:#bcbcbd}.alert-dark hr{border-top-color:#afafb0}.alert-dark .alert-link{color:#000}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#111112;border-radius:4px;box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#9A52FF;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:4px}.list-group-item-action{width:100%;color:#343437;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#343437;text-decoration:none;background-color:#F5F5F7}.list-group-item-action:active{color:#E0E0E1;background-color:#E0E0E1}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#111112;border:1px solid #232325}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#E0E0E1;pointer-events:none;background-color:#111112}.list-group-item.active{z-index:2;color:#fff;background-color:#9A52FF;border-color:#9A52FF}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#502b85;background-color:#e3cfff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#502b85;background-color:#d4b6ff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#502b85;border-color:#502b85}.list-group-item-secondary{color:#747475;background-color:#f6f6f7}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#747475;background-color:#e9e9eb}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#747475;border-color:#747475}.list-group-item-success{color:#1a7845;background-color:#c6f8dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#1a7845;background-color:#aff5cf}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1a7845;border-color:#1a7845}.list-group-item-info{color:#0d5585;background-color:#bfe5ff}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0d5585;background-color:#a6dbff}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0d5585;border-color:#0d5585}.list-group-item-warning{color:#82850d;background-color:#feffbf}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#82850d;background-color:#feffa6}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#82850d;border-color:#82850d}.list-group-item-danger{color:#850d48;background-color:#ffbfdf}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#850d48;background-color:#ffa6d2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#850d48;border-color:#850d48}.list-group-item-light{color:#858585;background-color:#fff}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#858585;background-color:#f2f2f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#858585;border-color:#858585}.list-group-item-dark{color:#090909;background-color:#bcbcbd}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#090909;background-color:#afafb0}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#090909;border-color:#090909}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#FF198B;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#FF198B;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#454549;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#000;background-clip:padding-box;border:1px solid #E0E0E1;border-radius:8px;box-shadow:0 0.25rem 0.5rem rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #C1C1C2;border-top-left-radius:7px;border-top-right-radius:7px}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #C1C1C2;border-bottom-right-radius:7px;border-bottom-left-radius:7px}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-content{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.5)}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:4px}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:8px;box-shadow:0 0.25rem 0.5rem rgba(0,0,0,0.2)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 8px}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:8px 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc(-.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:8px 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#fff;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#E0E0E1}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50% / 100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentcolor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentcolor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#9A52FF !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#7c1fff !important}.bg-secondary{background-color:#E0E0E1 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#c6c6c8 !important}.bg-success{background-color:#32E685 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#19cc6c !important}.bg-info{background-color:#19A3FF !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#0089e5 !important}.bg-warning{background-color:#FAFF19 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#e0e500 !important}.bg-danger{background-color:#FF198B !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#e50072 !important}.bg-light{background-color:#fff !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#e6e6e6 !important}.bg-dark{background-color:#111112 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#000 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #C1C1C2 !important}.border-top{border-top:1px solid #C1C1C2 !important}.border-right{border-right:1px solid #C1C1C2 !important}.border-bottom{border-bottom:1px solid #C1C1C2 !important}.border-left{border-left:1px solid #C1C1C2 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#9A52FF !important}.border-secondary{border-color:#E0E0E1 !important}.border-success{border-color:#32E685 !important}.border-info{border-color:#19A3FF !important}.border-warning{border-color:#FAFF19 !important}.border-danger{border-color:#FF198B !important}.border-light{border-color:#fff !important}.border-dark{border-color:#111112 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:4px !important}.rounded{border-radius:4px !important}.rounded-top{border-top-left-radius:4px !important;border-top-right-radius:4px !important}.rounded-right{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}.rounded-bottom{border-bottom-right-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-left{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-lg{border-radius:8px !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:"Space Mono",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#9A52FF !important}a.text-primary:hover,a.text-primary:focus{color:#6d06ff !important}.text-secondary{color:#E0E0E1 !important}a.text-secondary:hover,a.text-secondary:focus{color:#b9b9bb !important}.text-success{color:#32E685 !important}a.text-success:hover,a.text-success:focus{color:#16b560 !important}.text-info{color:#19A3FF !important}a.text-info:hover,a.text-info:focus{color:#007acc !important}.text-warning{color:#FAFF19 !important}a.text-warning:hover,a.text-warning:focus{color:#c7cc00 !important}.text-danger{color:#FF198B !important}a.text-danger:hover,a.text-danger:focus{color:#cc0065 !important}.text-light{color:#fff !important}a.text-light:hover,a.text-light:focus{color:#d9d9d9 !important}.text-dark{color:#111112 !important}a.text-dark:hover,a.text-dark:focus{color:#000 !important}.text-body{color:#E0E0E1 !important}.text-muted{color:#E0E0E1 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #838386;page-break-inside:avoid}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #C1C1C2 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#C1C1C2}.table .thead-dark th{color:inherit;border-color:#C1C1C2}}body{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}pre,code{font-feature-settings:"liga" 0;font-variant-ligatures:none}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:bold}h1,.h1{font-size:3.875rem;line-height:70px}@media (max-width: 480px){h1,.h1{font-size:2.625rem;line-height:48px}}h2,.h2{font-size:3.5rem;line-height:62px}@media (max-width: 767.98px){h2,.h2{font-size:1.75rem;line-height:34px}}@media (max-width: 767.98px){h2-sm,.h2-sm{font-size:1.75rem !important;line-height:34px !important}}h3,.h3{font-size:3rem;line-height:52px}@media (max-width: 767.98px){h3,.h3{font-size:1.5rem;line-height:28px}}@media (max-width: 767.98px){h3-sm,.h3-sm{font-size:1.5rem;line-height:28px}}h4,.h4{font-size:2rem;line-height:38px}@media (max-width: 767.98px){h4,.h4{font-size:1.25rem;line-height:26px}}h5,.h5{font-size:1.5rem;line-height:32px}@media (max-width: 767.98px){h5,.h5{font-size:1.125rem;line-height:26px}}h6,.h6{font-size:1.25rem;line-height:26px}@media (max-width: 767.98px){h6,.h6{font-size:1rem;line-height:24px}}.longform{font-size:1.5rem;line-height:32px;color:#F5F5F7;font-weight:500}@media (max-width: 767.98px){.longform{font-size:1.25rem;line-height:26px}}.numbers{font-size:6rem;line-height:104px;font-weight:bold;color:#fff}@media (max-width: 767.98px){.numbers{font-size:3.875rem;line-height:70px}}p{font-size:1rem;line-height:24px}.fs-base{font-size:1rem}.fs-3{font-size:0.75rem;line-height:1rem}.fs-4-5{font-size:1.125rem}.fs-5{font-size:1.25rem}.fs-5-5{font-size:1.375rem}.fs-6{font-size:1.5rem}.normal{font-weight:normal}.bold{font-weight:bold}.text-largest{font-size:1.5rem;font-weight:normal}.text-large{font-size:1.125rem}.text-small{font-size:0.875rem}.text-smaller{font-size:0.75rem}.text-smallest{font-size:0.625rem}.arrow-link{text-decoration:none}.arrow-link:after{content:url(../img/icon-long-arrow.svg);width:28px;padding-left:7px;transition:all .2s ease-in-out;display:inline-block;text-decoration:none}.arrow-link:hover:after{padding-left:14px}.lang-ja{font-family:'Work Sans', 'Noto Sans JP', sans-serif}.lang-ja h1,.lang-ja h2,.lang-ja h3,.lang-ja h4,.lang-ja h5,.lang-ja .github-edit-wrap .github-edit,.lang-ja .navbar .navbar-nav .nav-link,.lang-ja .content .children-display li a,.lang-ja .right-sidebar .level-1 a,.lang-ja .right-sidebar .separator,.lang-ja .use-case-step-num{font-family:'Work Sans', 'Noto Sans JP', sans-serif}.search .input-group-text{border-width:0;color:#fff;background-color:#232325;border-radius:4px 0 0 4px;padding:0.5rem 0.5rem 0.5rem 1rem;line-height:1.5}.search .ds-input{background-color:#232325;border-radius:0 4px 4px 0;padding:0.75rem 1rem 0.75rem 0.5rem;width:100%;border:1px solid #232325}.search .ds-input:focus{box-shadow:none;border-color:#9A52FF}.search .algolia-autocomplete{flex-grow:1}#algolia-autocomplete-listbox-0{z-index:1100 !important}.xrp-ledger-dev-portal .DocSearch-Modal{top:85px;background-color:#232325;box-shadow:none}.xrp-ledger-dev-portal .DocSearch-Form{box-shadow:inset 0 0 0 2px #9A52FF;background-color:#232325}.xrp-ledger-dev-portal .DocSearch-Hit-source{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Hits mark{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Hit-source,.xrp-ledger-dev-portal .DocSearch-Hit-Container,.xrp-ledger-dev-portal .DocSearch-Footer{background-color:#232325}.xrp-ledger-dev-portal .DocSearch-Hit a{background-color:#232325;box-shadow:none}.xrp-ledger-dev-portal .DocSearch-Hit-source{color:#A2A2A4}.xrp-ledger-dev-portal .DocSearch-Input{color:#fff}.xrp-ledger-dev-portal .DocSearch-Hit-title,.xrp-ledger-dev-portal .DocSearch-Hit-path,.xrp-ledger-dev-portal .DocSearch-Label,.xrp-ledger-dev-portal .DocSearch-Help{color:#F5F5F7 !important}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a{background:#343437}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-Container{background-color:#343437}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a mark{color:#9A52FF !important}.xrp-ledger-dev-portal .DocSearch-Prefill{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Button{background:#232325;width:100%}.xrp-ledger-dev-portal .DocSearch-Button:hover{background:#232325;border-radius:40px;box-shadow:inset 0 0 0 2px #9A52FF}.xrp-ledger-dev-portal .DocSearch-Button:hover .DocSearch-Button-Placeholder{color:#fff}.xrp-ledger-dev-portal .DocSearch-Search-Icon{color:#fff !important}.xrp-ledger-dev-portal .DocSearch-Modal{margin-top:-20px;max-width:55%;margin-right:13.5em}@media (max-width: 991.98px){.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu{min-width:unset}.xrp-ledger-dev-portal .DocSearch-Modal{top:127px;max-width:100%;margin-left:10px;margin-right:20px}}.xrp-ledger-dev-portal .DocSearch-Container{z-index:99999 !important;background-color:transparent !important}.xrp-ledger-dev-portal .DocSearch-Logo svg .cls-1,.xrp-ledger-dev-portal .DocSearch-Logo svg .cls-2{fill:white}.xrp-ledger-dev-portal .DocSearch-Commands-Key{color:#232325}.xrp-ledger-dev-portal #centersearchboxcontainer{justify-content:center}.xrp-ledger-dev-portal #topsearchboxcontainer{justify-content:right}.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu [class^="ds-dataset-"]{background-color:#111112;border:0;border-radius:8px}.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu::before{background-color:#111112;border:0}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion{background-color:#111112}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header{color:#fff;border:0;border-bottom:2px solid #9A52FF;font-weight:bold}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{color:#fff}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--title{color:#fff}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text{font-size:0.8rem;color:#E0E0E1}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#fff;background-color:#343437}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:none;background-color:#343437}#xrp-ledger-dev-portal{overflow:auto !important}body{position:relative}section{position:relative}.landing{padding:0}.square{position:relative;flex-basis:calc(50% - 30px);margin:15px;box-sizing:border-box;justify-content:center;align-items:center;border-radius:8px}.square::before{content:'';display:block;padding-top:100%}@media (min-width: 992px){.square{flex-basis:calc(25% - 30px)}}.square-50{flex-basis:calc(50% - 30px)}@media (max-width: 767.98px){.square-50{flex-basis:calc(50% - 20px)}}.nav-grid-lg{display:flex;flex-direction:column}.nav-grid-lg .nav-item{width:100%}.nav-grid-lg .nav-item .nav-link{display:flex}.nav-grid-lg .nav-item .nav-link span{flex-grow:0}.nav-grid-lg .nav-item .nav-link img{max-height:2rem}.nav-grid-lg .nav-grid-head{margin-top:2.5rem}@media (min-width: 992px){.nav-grid-lg{display:grid;grid-auto-flow:column;grid-column-gap:80px}.nav-grid-lg .nav-grid-head{margin-top:0}}.col-lg{padding-left:0;padding-right:0}@media (min-width: 992px){.cols-of-1{grid-template-rows:repeat(1, min-content)}}@media (min-width: 992px){.cols-of-2{grid-template-rows:repeat(2, min-content)}}@media (min-width: 992px){.cols-of-3{grid-template-rows:repeat(3, min-content)}}@media (min-width: 992px){.cols-of-4{grid-template-rows:repeat(4, min-content)}}@media (min-width: 992px){.cols-of-5{grid-template-rows:repeat(5, min-content)}}@media (min-width: 992px){.cols-of-6{grid-template-rows:repeat(6, min-content)}}.card-grid{display:grid;grid-gap:40px;padding:0;width:100%;grid-template-columns:1fr}@media (min-width: 992px){.card-grid{grid-gap:80px}}.card-grid .col{padding-left:0;padding-right:0;min-width:100%}.card-grid.card-grid-3xN{grid-auto-rows:auto}@media (min-width: 992px){.card-grid.card-grid-3xN{grid-template-columns:1fr 1fr 1fr}}.card-grid.card-grid-2xN{grid-template-columns:1fr 1fr;grid-auto-rows:auto}@media (max-width: 991.98px){.card-grid.card-grid-2xN{grid-template-columns:1fr}}.card-grid.card-grid-1x2{grid-template-columns:1fr 2fr;grid-auto-rows:auto}@media (max-width: 991.98px){.card-grid.card-grid-1x2{display:flex}}.card-grid .card{padding:20px;border:0;min-height:264px}@media (min-width: 768px){.card-grid .card{min-height:347px}}@media (min-width: 992px){.card-grid .card{padding:40px}}.card-grid .card .card-body{padding:8px;padding-bottom:24px}.card-grid.section-hero{padding-left:0}.container-new{display:flex;flex-wrap:wrap;margin:0 auto;padding:0 32px;max-width:100%;z-index:1}@media (min-width: 768px){.container-new{max-width:608px}}@media (min-width: 992px){.container-new{max-width:942px}}@media (min-width: 1200px){.container-new{max-width:1280px}}.xrp-ledger-dev-portal.sidebar-primary .main{z-index:5;padding:2rem;min-height:700px}@media (min-width: 992px){.xrp-ledger-dev-portal.sidebar-primary .main{top:80px}}.left-sidebar{padding:2rem}.left-sidebar .external-link::after{background-position:left 6px bottom 1px;width:2rem}.left-sidebar:hover::after{transform:translate(3px, -3px)}@media (min-width: 992px){.left-sidebar{position:sticky;max-height:calc(100vh - 80px);top:80px;left:0;overflow:auto;border:0}}.right-sidebar{padding:2rem;border:1px solid #454549}@media (min-width: 992px){.right-sidebar{position:sticky;max-height:calc(100vh - 80px);top:80px;right:0;overflow:auto;border:0}}@media (max-width: 991.98px){.right-sidebar .card{padding-left:0}#page-toc-wrapper{position:static;clear:both;overflow-y:inherit;max-width:100%;max-height:inherit;word-break:break-all}.main{overflow-wrap:break-word;word-wrap:break-word;overflow:hidden}}@media (max-width: 480px){html{overflow-x:hidden !important}}@media (max-width: 400px){.navbar .navbar-brand .brand-text{margin-right:0;letter-spacing:-0.08rem}.navbar .navbar-brand{margin-right:0}.navbar .navbar-brand .logo{margin-right:0;margin-left:-1rem}.btn{white-space:normal}}.timeline-wrapper{z-index:999;position:relative}.timeline:before{content:'';position:absolute;top:-40px;left:18px;height:95%;width:4px;background:linear-gradient(180deg, #feff01 0%, #ff2d9a 33%, #a3088f 66%, rgba(44,4,128,0.85) 100%)}@media (max-width: 991.98px){.timeline:before{left:8px}}.timeline-dot{margin-top:94px;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0;width:18px;height:18px;border-radius:50%;background:#111112;box-sizing:border-box}.timeline-block:first-child .timeline-dot{border:3px solid #FAFF19}.timeline-block:nth-child(2) .timeline-dot{border:3px solid #FF884B}.timeline-block:nth-child(3) .timeline-dot{border:3px solid #C000E5}.timeline-block:nth-child(4) .timeline-dot{border:3px solid #40004C}.timeline-block{display:flex;position:relative;z-index:1}.timeline-content{flex-grow:1;position:relative;margin-left:1.25em}.timeline h4{margin-top:-4px}@media (min-width: 768px){.timeline:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.timeline-dot{-ms-flex-order:1;order:1;margin-left:calc(5% - 9px);will-change:transform}.timeline-block:nth-child(even){-ms-flex-direction:row-reverse;flex-direction:row-reverse}.timeline-dot{margin-right:calc(5% - 9px)}.timeline-content{width:45%;-ms-flex-positive:0;flex-grow:0;will-change:transform;margin:0;--line-height-multiplier: 1.2}}aside li a{color:#fff;text-decoration:none;font-size:1.05rem}aside .sidenav_cat_title{color:#fff}aside a:hover,aside .sidenav_cat_title:hover{color:#9A52FF}aside a.active,aside a.active:hover,aside .active>a,aside .active>a:hover{color:#9A52FF;font-weight:700}aside a.active-parent,aside .active-parent>a{font-weight:700}.page-toc .level-1 a,.command-list .separator{font-weight:700;color:#fff}.nav-toggler{position:absolute;width:1.75em;height:1.75em;line-height:0;display:grid;justify-content:center;align-content:center}.nav-toggler::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}.nav-toggler:empty::after{margin-left:0}.nav-toggler::after{transition-duration:0.3s}.nav-toggler.collapsed::after{transform:rotate(-90deg)}.dactyl-tree-nav nav{margin-left:1rem;padding-left:0;border-left:1px solid #fff}.dactyl-tree-nav nav .nav-link:hover,.dactyl-tree-nav nav .nav-link:active{border-left:1px solid #9A52FF;margin-left:-1px}.dactyl-tree-nav nav .active>.nav-link{border-left:2px solid #9A52FF;margin-left:-1px;padding-left:calc(1rem - 1px)}.dactyl-tree-nav .nav-item{position:relative}.dactyl-tree-nav .nav-item .nav-link{padding:0.25rem 1rem;font-size:0.9rem}.dactyl-tree-nav .nav-item.nav-parent{padding-top:0}.dactyl-tree-nav .nav-item.nav-parent .nav-link{padding-left:0;padding-top:0;font-size:1.125rem;line-height:initial}.dactyl-tree-nav .nav-item .nav-toggler+.nav-link{padding-left:2rem}.dactyl-tree-nav>.nav-item{padding:.5rem 0;font-size:1.125rem}.dactyl-tree-nav>.nav-item>.nav-link{font-weight:bold}.dactyl-tree-nav .collapsing.nav{flex-wrap:unset}.toc-header{font-weight:bold;font-size:14px;padding:1rem 0}.toc-header h4{line-height:20px;font-size:1.2em;padding:0;margin:0}#page-toc-wrapper .card-body{list-style-type:none}.page-toc,.command-list{padding-left:0;border-left:1px solid #fff}.page-toc li,.command-list li{list-style-type:none;padding:0}.page-toc li.separator,.command-list li.separator{padding:.25rem 1rem}.page-toc li a,.command-list li a{display:block;margin-top:5px;padding:.25rem 1rem;font-size:0.9rem}.page-toc li a:hover,.page-toc li a .active,.command-list li a:hover,.command-list li a .active{text-decoration:none;border-left:1px solid #9A52FF;margin-left:-1px}.page-toc li.active a,.page-toc li.active a:hover,.command-list li.active a,.command-list li.active a:hover{border-left:2px solid #9A52FF;padding-left:calc(1rem - 1px);margin-left:-1px}.page-toc .level-3,.command-list .level-3{margin-left:16px;border-left:1px solid #fff;margin-bottom:0;padding-bottom:5px}.page-toc .level-3 a,.command-list .level-3 a{margin-top:0;padding-bottom:5px}.page-toc.no-sideline,.command-list.no-sideline{border-left:0}.page-toc.no-sideline a:hover,.page-toc.no-sideline a.active,.command-list.no-sideline a:hover,.command-list.no-sideline a.active{border-left:0;margin-left:0}.command-list li a{margin-top:0}.h32{height:32px}.w32{width:32px}.h36{height:36px}.w36{width:36px}.h40{height:40px}.w40{width:40px}.w44{width:44px}.w48{width:48px}.w-100{width:100%}.min-vh100{min-height:100vh}.vw100{width:100vw;min-width:100%}@media (max-width: 767.98px){.mb-3-sm-i{margin-bottom:1rem !important}}.ml-5{margin-left:1.25rem}@media (min-width: 768px){.ml-5-until-md{margin-left:1.25rem}}.mr-5{margin-right:1.25rem}@media (min-width: 768px){.mr-5-until-md{margin-right:1.25rem}}.mb-6{margin-bottom:1.5rem}@media (max-width: 767.98px){.mb-6-sm{margin-bottom:1.5rem}}.mt-6{margin-top:1.5rem}@media (min-width: 576px){.mt-6-until-sm{margin-top:1.5rem !important}}.mb-8{margin-bottom:2rem}@media (max-width: 767.98px){.mb-8-sm{margin-bottom:2rem}}.mt-8{margin-top:2rem}@media (min-width: 576px){.mt-8-until-sm{margin-top:2rem !important}}.mt-9{margin-top:2.25rem}.mb-9{margin-bottom:2.25rem}.mt-10{margin-top:2.5rem}@media (max-width: 767.98px){.mt-10-sm{margin-top:2.5rem}}.mb-10{margin-bottom:2.5rem}@media (min-width: 576px){.mb-10-until-sm{margin-bottom:2.5rem}}@media (max-width: 767.98px){.mb-10-sm{margin-bottom:2.5rem}}.ml-10{margin-left:2.5rem}.mr-10{margin-right:2.5rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}@media (min-width: 576px){.mx-10-until-sm{margin-left:2.5rem;margin-right:2.5rem}}@media (min-width: 768px){.mx-10-until-md{margin-left:2.5rem;margin-right:2.5rem}}@media (max-width: 767.98px){.mx-10-sm{margin-left:2.5rem;margin-right:2.5rem}}.mt-12{margin-top:3rem}.mb-12{margin-bottom:3rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mt-13{margin-top:3.25rem}.mb-13{margin-bottom:3.25rem}.mt-14{margin-top:3.5rem}.mt-16{margin-top:4rem}@media (max-width: 767.98px){.mt-16-sm{margin-top:4rem}}.mb-16{margin-bottom:4rem}@media (max-width: 767.98px){.mb-16-sm{margin-bottom:4rem}}.mb-18{margin-bottom:4.5rem}.mt-20{margin-top:5rem}@media (max-width: 767.98px){.mt-20-sm{margin-top:5rem}}@media (min-width: 576px){.mt-20-until-sm{margin-top:5rem}}.mb-20{margin-bottom:5rem}@media (max-width: 767.98px){.mb-20-sm{margin-bottom:5rem}}@media (min-width: 576px){.mb-20-until-sm{margin-bottom:5rem}}.my-20{margin-top:5rem;margin-bottom:5rem}.my-26{margin-top:6.5rem;margin-bottom:6.5rem}.mb-30{margin-bottom:7.5rem}.mt-30{margin-top:7.5rem}@media (min-width: 576px){.mt-30-until-sm{margin-top:7.5rem}}.mt-40{margin-top:10rem}@media (min-width: 576px){.mt-40-until-sm{margin-top:10rem}}.mb-40{margin-bottom:10rem}@media (min-width: 576px){.mb-40-until-sm{margin-bottom:10rem}}.mb-49{margin-bottom:12.25rem}.mb-50{margin-bottom:12.5rem}@media (min-width: 576px){.mb-50-until-sm{margin-bottom:12.5rem}}@media (max-width: 767.98px){.pl-0-sm{padding-left:0 !important}}@media (max-width: 767.98px){.pr-0-sm{padding-right:0 !important}}@media (max-width: 767.98px){.pt-3-sm{padding-top:1rem !important}}.p-6{padding:1.5rem}@media (max-width: 767.98px){.p-6-sm{padding:1.5rem}}.p-8{padding:2rem}@media (max-width: 767.98px){.p-8-sm{padding:2rem}}.p-10{padding:2.5rem}@media (min-width: 576px){.p-10-until-sm{padding:2.5rem}}.py-20{padding-bottom:5rem;padding-top:5rem}.px-20{padding-left:5rem;padding-right:5rem}.pt-20{padding-top:5rem}.pb-20{padding-bottom:5rem}.py-26{padding-top:6.5rem;padding-bottom:6.5rem}@media (max-width: 767.98px){.py-26{padding-top:2.5rem;padding-bottom:2.5rem}}.pt-26{padding-top:2.5rem}@media (min-width: 576px){.pt-26-until-sm{padding-top:6.5rem}}.pb-26{padding-bottom:6.5rem}@media (min-width: 576px){.pb-26-until-sm{padding-bottom:6.5rem}}.pt-30{padding-top:7.5rem}.pb-30{padding-bottom:7.5rem}.pt-40{padding-top:10rem}@media (min-width: 576px){.pt-40-until-sm{padding-top:10rem}}.pb-40{padding-bottom:10rem}.pb-50{padding-bottom:12.5rem}.pt-50{padding-top:12.5rem}.py-50{padding-bottom:12.5rem;padding-top:12.5rem}@media (min-width: 576px){.py-50-until-sm{padding-bottom:12.5rem;padding-top:12.5rem}}.floating-nav{top:6rem}.last-section{margin-bottom:100px}.bottom-0{bottom:0}.justify-center{justify-content:center}@media (max-width: 767.98px){.justify-center-sm{justify-content:center}}@media (max-width: 575.98px){.overflow-xs{overflow:scroll}.overflow-x-xs{overflow-x:scroll;overflow-y:hidden}}@media (min-width: 768px){.position-sm-absolute{position:absolute}}.va-middle{vertical-align:middle}.ls-none{list-style:none}.no-wrap{white-space:nowrap}.align-items-stretch{align-items:stretch}.underline{text-decoration:underline}@media (max-width: 575.98px){.d-none-xs{display:none}}@media (max-width: 767.98px){.d-none-sm{display:none}}.d-block{display:block}.border-green{border:1px solid #9A52FF}.border-none{border:none !important}.grey-400{color:#A2A2A4}.grey-500{color:#838386}.grey-700{color:#343437}.white{color:#fff}.stat-highlight{color:#32E685}.br-8{border-radius:8px}@media (max-width: 767.98px){br.until-sm{content:''}}.z-index-1{z-index:1}.bb-gray{border-bottom:1px solid #454549}@keyframes arrowDance{0%{padding-left:7px}50%{padding-left:14px}100%{padding-left:7px}}@keyframes arrowDance2{0%{right:0}50%{right:7px}100%{right:0}}@keyframes arrowDanceDiag{0%{right:7px;margin-top:0}50%{right:0;margin-top:-7px}100%{right:7px;margin-top:0}}.btn,.content a.button,.content .btn{font-weight:bold;cursor:pointer;text-decoration:none;transition:0.2s;padding:0.5rem 1rem;line-height:16px}.content a.button{padding:.5rem 1rem;margin:0 0.5rem;display:inline-block}.btn.disabled,button.disabled,.btn[disabled="disabled"],button[disabled="disabled"]{cursor:not-allowed}.btn-primary code,.btn-secondary code{color:inherit}.btn-primary{background:#7919FF;font-weight:bold;color:#fff;border:none;border-color:transparent}.btn-primary:hover{background:#5F00E5}.btn-primary.disabled,.btn-primary[disabled="disabled"]{background:#4A00B2}.btn-primary.disabled:hover,.btn-primary[disabled="disabled"]:hover{background:#4A00B2}@media (max-width: 767.98px){.btn-arrow{display:block;width:100%}}.btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right.svg);position:relative;top:1px;vertical-align:middle;padding-left:8px;-webkit-transition:transform 0.3s ease-out;-moz-transition:transform 0.3s ease-out;-ms-transition:transform 0.3s ease-out;-o-transition:transform 0.3s ease-out;transition:transform 0.3s ease-out}.btn-arrow:hover{background:#5F00E5 !important;border:none}.btn-arrow:hover::after{-webkit-transform:translateX(4px);-moz-transform:translateX(4px);-ms-transform:translateX(4px);-o-transform:translateX(4px);transform:translateX(4px)}.btn-arrow-out::after{background-position:left 0px bottom 0px;content:"\00a0";background-image:url(../img/icons/arrow-up-right-white.svg);background-repeat:no-repeat;display:inline-block;padding:4px 8px 4px 12px;transition:background-position 0.3s ease-in-out;margin-left:4px}.btn-arrow-out:hover::after{background-position:left 4px bottom 4px}@media (max-width: 767.98px){.btn-arrow-out{display:block;width:100%}}.jump-to-top{display:none;position:fixed;bottom:36px;right:36px;font-weight:700;z-index:1000}.jump-to-top::after{display:none}.accordian-row{background:#232325;border-radius:5px;padding:32px}.accordian-row h3 a{position:relative;padding-right:2rem}.accordian-row h3 a:hover{color:#fff}.accordian-row .chevron{position:absolute;top:0;right:0}.content table{clear:right;margin-bottom:48px}.content table code{word-break:normal;white-space:nowrap}th{border-bottom:2px solid #E0E0E1}tr{border-bottom:1px solid #E0E0E1}th,td{padding:0.2em;vertical-align:text-top}td:nth-child(1){font-weight:bold}.landing-table th,.landing-table tr{border-bottom:2px solid #454549}.landing-table td{width:33.33%;padding:16px 40px 16px 0}.landing-table td:nth-child(1){font-weight:normal}@media (max-width: 767.98px){.landing-table td{font-size:0.875rem}}.landing-table tr:last-child{border-bottom:none}.landing-table tbody td{color:#E0E0E1}.dblue{color:#454549}#overview-table td:nth-child(1){width:40%}#overview-table td:nth-child(2){width:30%}#overview-table tbody td{padding:2rem 0.75rem}@media (max-width: 991.98px){#overview-table{font-size:0.875rem}#overview-table thead .h4{font-size:1.125rem}}.content table{clear:right;margin-bottom:48px}.content table code{word-break:normal;white-space:nowrap}th{border-bottom:2px solid #E0E0E1}tr{border-bottom:1px solid #E0E0E1}th,td{padding:0.2em;vertical-align:text-top}td:nth-child(1){font-weight:bold}.landing-table th,.landing-table tr{border-bottom:2px solid #454549}.landing-table td{width:33.33%;padding:16px 40px 16px 0}.landing-table td:nth-child(1){font-weight:normal}@media (max-width: 767.98px){.landing-table td{font-size:0.875rem}}.landing-table tr:last-child{border-bottom:none}.landing-table tbody td{color:#E0E0E1}.dblue{color:#454549}#overview-table td:nth-child(1){width:40%}#overview-table td:nth-child(2){width:30%}#overview-table tbody td{padding:2rem 0.75rem}@media (max-width: 991.98px){#overview-table{font-size:0.875rem}#overview-table thead .h4{font-size:1.125rem}}.related-tasks-links a{color:#454549;text-decoration:none}.related-tasks-links a:hover{color:#000}.use-case-external-link{border:1px solid #C1C1C2}.content .use-case-external-link a{text-decoration:none;color:#000}.use-case-step-num{margin-top:64px;margin-bottom:24px;color:#eae7e6;font-size:5.16em;font-weight:400;font-family:'Space Mono', sans-serif}.use-case-step-length{float:right;color:#888;font-size:1rem}.use-case-steps h2{margin-top:10px;margin-bottom:10px;font-size:1.728em;line-height:32px;font-weight:700}.use-case-steps h2 a{text-decoration:none}.use-case-steps h2:first-of-type:before{display:none}.use-case h1{font-size:2.4em;padding-bottom:10px}.use-case-steps h2:before{margin-top:-30px;height:0}.use-case-steps h2:first-of-type{margin-top:-30px}.related-tasks-links ul{list-style-type:none;padding-left:0}.related-tasks-links ul li{margin:0px;padding-top:2px}.related-tasks-links a:hover::after{padding-left:.5em}.related-tasks-links a::after{content:" ➝";padding-left:0;transition:all .2s ease-in-out}.github-edit-wrap .github-edit{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");background-size:24px 24px;background-position:left 12px center;background-repeat:no-repeat;padding-left:48px;text-decoration:none;margin-bottom:1rem;margin-top:0}.top-nav{background-color:#111112;height:80px;padding:0}.top-nav .navbar-brand{text-decoration:none;white-space:pre;-webkit-transition:opacity 0.2s ease, color 0.2s ease;transition:opacity 0.2s ease, color 0.2s ease;padding-left:2rem}.top-nav .navbar-brand .logo{margin-left:0;content:url(../img/XRPLedger_DevPortal-white.svg);width:162px;height:40px;display:block}.top-nav .navbar-brand:hover{opacity:0.75}@media (max-width: 991.98px){.top-nav .navbar-brand{padding-left:2rem}.top-nav .navbar-brand img{width:120px}}.top-nav .nav-item{font-weight:600}@media (min-width: 992px){.top-nav #topnav-pages{flex-grow:1}}.top-nav #topnav-pages .nav-link{color:#F5F5F7;font-size:1rem;line-height:1.25rem;text-decoration:none;font-weight:600}.top-nav .dropdown-toggle{position:relative}.top-nav .dropdown-menu{border-width:0}.top-nav .dropdown-menu h5{font-weight:400;font-size:12px;color:#A2A2A4;margin-bottom:0}.top-nav .dropdown-menu .dropdown-item{line-height:1rem;padding:0.75rem 0;white-space:normal}.top-nav .dropdown-menu .dropdown-item.dropdown-hero{width:100%;display:flex;padding:1rem 2rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero>img{width:68px;height:68px;background-color:#232325;border-radius:4px;flex-grow:0;padding:0.75rem;margin-right:2rem;margin-top:auto;margin-bottom:auto}.top-nav .dropdown-menu .dropdown-item.dropdown-hero p{font-size:14px;color:#C1C1C2;margin:0;white-space:normal}.top-nav .dropdown-menu .dropdown-item.dropdown-hero h4{font-size:1.25rem;font-weight:600;margin-bottom:0;line-height:2rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero:hover h4{color:#9A52FF}.top-nav .dropdown-menu .dropdown-item.dropdown-hero:hover p{font-weight:400}.top-nav .dropdown-menu .dropdown-item:last-child{padding-bottom:0}.top-nav .dropdown-menu .dropdown-item:first-child{padding-top:0}.top-nav .dropdown-menu .col-for-popular-pages,.top-nav .dropdown-menu .col-for-人気ページ{background-color:#232325}.top-nav .dropdown-menu a:hover{color:#9A52FF;background-color:inherit}.top-nav .dropdown-menu h5:hover{background-color:inherit}.top-nav #topnav-search{flex-grow:1}.top-nav #topnav-search .input-group{flex-grow:1;flex-wrap:nowrap}@media (max-width: 991.98px){.top-nav #topnav-search .form-inline{padding:1rem 2rem}}.top-nav #topnav-search .input-group-text{height:40px}.top-nav #topnav-search .ds-input{height:40px}.top-nav #topnav-language .dropdown-item{font-weight:600}@media (min-width: 992px){.top-nav{padding:0 2rem}.top-nav .navbar-brand{margin-left:0;padding-left:0}.top-nav .dropdown-toggle::after{display:none}.top-nav .dropdown-toggle>span{border-bottom:2px solid transparent}.top-nav .dropdown .dropdown-toggle:hover>span:not(.chevron){padding-bottom:8px;border-bottom:2px solid #9A52FF;margin-bottom:-8px}.top-nav .dropdown-menu{border-radius:0 0 8px 8px;padding:2.5rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero{padding:0}.top-nav .dropdown-menu.show{display:grid;gap:40px}.top-nav .dropdown-menu.show#topnav_dd_xrp-ledger-overviewhtml{grid-template-columns:180px 180px 180px}.top-nav .dropdown-menu.show#topnav_dd_docshtml{grid-template-columns:180px 180px 260px;left:-200px}.top-nav .dropdown-menu.show#topnav_dd_contributehtml{grid-template-columns:200px}.top-nav .dropdown-menu.show#topnav_dd_resourceshtml{grid-template-columns:195px 180px 180px;left:-200px}.top-nav .dropdown-menu.show .dropdown-hero{grid-row:1;grid-column:1 / 4}.top-nav .dropdown-menu.show #dropdown-hero-for-documentation,.top-nav .dropdown-menu.show #dropdown-hero-for-ドキュメント{grid-column:1 / 3}.top-nav .dropdown-menu.show .col-for-xrp-ledger{grid-row:1 / 3;grid-column:1}.top-nav .dropdown-menu.show .col-for-xrp{grid-column:2}.top-nav .dropdown-menu.show .col-for-sustainability,.top-nav .dropdown-menu.show .col-for-持続可能性{grid-column:2}.top-nav .dropdown-menu.show .col-for-about,.top-nav .dropdown-menu.show .col-for-概要{grid-row:1 / 3;grid-column:3}.top-nav .dropdown-menu.show .col-for-article-types,.top-nav .dropdown-menu.show .col-for-カテゴリ{grid-column:1;grid-row:2}.top-nav .dropdown-menu.show .col-for-get-started,.top-nav .dropdown-menu.show .col-for-始めましょう{grid-column:2;grid-row:2 / 4}.top-nav .dropdown-menu.show .col-for-popular-pages,.top-nav .dropdown-menu.show .col-for-人気ページ{grid-column:3;grid-row:1 / 4;margin:-40px -40px -40px 0;padding:40px}.top-nav .dropdown-menu.show .col-for-development,.top-nav .dropdown-menu.show .col-for-開発{grid-column:1}.top-nav .dropdown-menu.show .col-for-current-status,.top-nav .dropdown-menu.show .col-for-現在のステータス{grid-column:2}.top-nav .dropdown-menu.show .col-for-join-in,.top-nav .dropdown-menu.show .col-for-参加する{grid-column:3}.top-nav .dropdown-menu.smaller-dropdown{min-width:180px;padding:1.25rem}.top-nav #topnav-pages{flex-grow:0}}@media (min-width: 992px) and (min-width: 992px) and (max-width: 1133px){.top-nav #topnav-pages .nav-link{padding:1rem 1rem}}@media (min-width: 992px){.top-nav #topnav-language{flex-grow:0}.top-nav #topnav-language hr{display:none}.top-nav #topnav-language #language_selector_header_btn{padding-right:0}}@media (min-width: 992px) and (min-width: 992px) and (max-width: 1133px){.top-nav #topnav-language #language_selector_header_btn{padding-left:1rem}}@media (min-width: 992px) and (min-width: 1200px){.top-nav #topnav-search{margin-left:3.5rem;margin-right:0.5rem}}@media (max-width: 991.98px){.top-nav .navbar-toggler{border:0;padding:30px 2rem;font-size:1rem;display:inline-block}.top-nav .navbar-toggler .navbar-toggler-icon{background:none;height:20px;width:20px;position:relative}.top-nav .navbar-toggler .navbar-toggler-icon::after,.top-nav .navbar-toggler .navbar-toggler-icon::before,.top-nav .navbar-toggler .navbar-toggler-icon div{position:absolute;content:" ";background-color:#F5F5F7;display:block;width:100%;height:3px;transition:all 0.2s ease}.top-nav .navbar-toggler .navbar-toggler-icon::before{top:0}.top-nav .navbar-toggler .navbar-toggler-icon::after{bottom:0}.top-nav .navbar-toggler .navbar-toggler-icon div{top:calc(50% - 1.5px)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon::before{transform:translateY(8px) rotate(135deg)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon::after{transform:translateY(-9px) rotate(-135deg)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon div{transform:scale(0)}.top-nav .navbar-nav .nav-link,.top-nav .navbar-collapse>.nav-item{line-height:150%;background:#111112}.top-nav .navbar-nav .nav-link label,.top-nav .navbar-collapse>.nav-item label{margin-bottom:0}.top-nav .navbar-nav .nav-link{padding:1rem 2rem}.top-nav .dropdown-menu{margin:0;width:100%;overflow:auto;transition:all 0.2s ease;height:0;display:block;padding:0;border-radius:0}.top-nav .dropdown-menu.show{height:calc(100vh - 80px - 52px)}.top-nav .dropdown-menu.show>:last-child{padding-bottom:4rem}.top-nav .dropdown-menu.show#topnav_dd_docshtml{display:grid;grid-template-columns:minmax(187px, 1fr) minmax(187px, 1fr);gap:1px;left:-200px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .dropdown-hero{grid-column:1 / 3;grid-row:1}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-article-types,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-カテゴリ{grid-column:1;grid-row:2}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-get-started,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-始めましょう{grid-column:2;grid-row:2 / 4;padding-bottom:32px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-popular-pages,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-人気ページ{grid-column:1 / 3;grid-row:4;margin:-1px;padding-top:33px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-questions,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-質問{grid-column:1 / 3;grid-row:5;margin:-1px;padding-bottom:32px}.top-nav .dropdown-menu .navcol{padding:1rem 2rem}.top-nav .dropdown-menu.smaller-dropdown{padding:0 2rem}.top-nav .dropdown-menu.smaller-dropdown.show{padding:1rem 2rem;height:auto}.top-nav .dropdown-menu .dropdown-hero:first-child{padding-top:1rem}.top-nav .dropdown-toggle:not(.with-caret)::before,.top-nav .dropdown-toggle:not(.with-caret)::after{border:0;font-family:FontAwesome;color:#9A52FF;font-size:0.75rem;transition:all 0.2s ease;overflow:clip;width:1rem}.top-nav .dropdown-toggle:not(.with-caret)::before{content:"\f053";display:inline-block;margin-bottom:-5px}.top-nav .dropdown-toggle:not(.with-caret)::after{content:"\f054";position:absolute;right:2rem}.top-nav .dropdown.show .dropdown-toggle::after{text-indent:5rem}.top-nav .dropdown:not(.show) .dropdown-toggle::before{width:0;height:0;text-indent:-5rem}.top-nav .dropdown-toggle.with-caret::after{border:0}.top-nav #top-main-nav{padding-top:72px;position:relative;transition:padding-top 0.2s ease}.top-nav #top-main-nav.submenu-expanded{padding-top:0}.top-nav #top-main-nav.submenu-expanded .dropdown:not(.show) .dropdown-toggle{display:none}.top-nav #top-main-nav.submenu-expanded #topnav-search{height:0;overflow:clip;padding-top:0;padding-bottom:0}.top-nav #topnav-search{position:absolute;top:0;width:100%;height:72px;transition:all 0.2s ease}.top-nav #topnav-search .input-group{flex-wrap:nowrap}.top-nav #topnav-language hr{border-top:1px solid #232325;margin-top:0.25rem;margin-bottom:0.25rem;display:static}}.top-nav #top-nav-hero-docs{content:url("../img/icons/docs.svg")}.top-nav #top-nav-hero-contribute{content:url("../img/icons/contribute.svg")}.main h1:before,.main h2:before,.main h3:before,.main h4:before,.main h5:before,.main h6:before,.interactive-block:before{display:block;content:" ";margin-top:-80px;height:80px;visibility:hidden}a{z-index:1}.chevron{position:relative;display:inline-block;width:0.75rem;height:0.5625rem}.chevron span{position:absolute;top:0.25rem;display:inline-block;width:0.5rem;height:0.15rem;background-color:#9A52FF;transition:all 0.2s ease;border:none}.chevron:not(.expander) span:first-of-type{left:0;transform:rotate(45deg)}.chevron:not(.expander) span:last-of-type{right:0;transform:rotate(-45deg)}.chevron.active span:first-of-type{transform:rotate(-45deg)}.chevron.active span:first-of-type{transform:rotate(45deg)}.dropdown.show .chevron span:first-of-type,.expander:not(.collapsed) .chevron span:first-of-type{transform:rotate(-45deg)}.dropdown.show .chevron span:last-of-type,.expander:not(.collapsed) .chevron span:last-of-type{transform:rotate(45deg)}.custom-theme-toggle .custom-control-label{padding:1rem;cursor:pointer}.custom-theme-toggle .custom-control-label::before,.custom-theme-toggle .custom-control-input:checked ~ .custom-control-label::before{position:static;display:inline-block;content:" ";cursor:pointer;border:0;background-image:url("../img/sun-moon.svg");background-size:3rem;background-color:transparent;transform-origin:center;margin-left:-0.5rem;margin-right:0.5rem;transition:transform 0.4s ease, background-position 0.4s ease;transform:rotate(15deg);background-position:top left}.custom-theme-toggle .custom-control-label::after{display:none}@media (max-width: 991.98px){.navbar-collapse,.dropdown-menu{box-shadow:0px 25px 40px -20px #000}}.content{padding-bottom:50px}.content p code,.content table code,.content li>code{background-color:#0A2E1B;color:#5BEB9D}.content a{text-decoration:underline}.content h1{font-size:3rem;margin-top:32px;line-height:1.2;font-weight:700}.content h1:first-child{margin-top:0;line-height:1.2}.content h1:first-child::before{margin-top:-80px}.content h2{margin-top:2.5rem;margin-bottom:1.5rem;font-size:2.5rem;font-weight:600;line-height:1.2}.content h3{font-size:2.125rem;margin-top:2rem;margin-bottom:1rem;line-height:1.2}.content h4{font-size:1.75rem;margin-top:1.5rem;margin-bottom:0.5rem;line-height:1.2}.content h5{font-size:1.25rem;margin-top:1.25rem;line-height:1.2;font-weight:700}.content h6{font-size:1rem;margin-top:1rem;line-height:1.2;font-weight:700}.content li{margin:6px;margin-top:24px}.content li p{margin:0}.content a[title="Source"]{float:right;padding-left:20px}.content h1.invisible,.content h2.invisible,.content h3.invisible,.content h4.invisible,.content h5.invisible,.content h6.invisible{font-size:0;line-height:0;margin:0}.content h1.invisible .hover_anchor,.content h2.invisible .hover_anchor,.content h3.invisible .hover_anchor,.content h4.invisible .hover_anchor,.content h5.invisible .hover_anchor,.content h6.invisible .hover_anchor{display:none}.blurb a{text-decoration:underline}.hover_anchor{visibility:hidden;padding-left:1rem;font-size:1.25rem}h1:hover .hover_anchor,h2:hover .hover_anchor,h3:hover .hover_anchor,h4:hover .hover_anchor,h5:hover .hover_anchor,h6:hover .hover_anchor{visibility:visible;text-decoration:none}pre{color:#fff;background-color:#232325;word-wrap:normal;padding:2rem;border-radius:4px}pre code{white-space:pre;color:#fff;background-color:#232325}.multicode{padding:0;z-index:1;position:relative}.multicode pre{background:none;border:none;border-radius:0;padding:0;clear:both}.multicode pre code{overflow:auto;max-height:24em;border-radius:0 4px 4px 4px;display:block;padding:2rem}.multicode pre code.expanded{overflow:visible;max-height:none;position:absolute;min-width:100%}.multicode ul{margin:0 !important;padding:0}.multicode ul li{display:block;float:left;list-style-type:none;margin-right:0px;margin-left:0px;border:0;clear:none}.multicode a{text-decoration:none;color:#fff;background-color:transparent;padding:.75rem 2rem;margin:0;border-radius:4px 4px 0 0}.multicode a.current{background-color:#232325}.multicode a:hover{text-decoration:none;background-color:#232325;color:#9A52FF;padding-bottom:0.625rem}.multicode .btn{z-index:10}.multicode .codetabs{position:relative;z-index:10}.clipboard-btn{z-index:10;margin-right:10px}.codehilite{background:#232325;color:#fff}.codehilite .c,.codehilite .ch,.codehilite .cm,.codehilite .cp,.codehilite .cpf,.codehilite .c1,.codehilite .cs{color:#838386}.codehilite .k,.codehilite .kc,.codehilite .kd,.codehilite .kn,.codehilite .kp,.codehilite .kr,.codehilite .kt{color:#FF6719}.codehilite .m,.codehilite .mb,.codehilite .mh,.codehilite .mi,.codehilite .mo,.codehilite .il{color:#19A3FF}.codehilite .n,.codehilite .na,.codehilite .nb,.codehilite .nc,.codehilite .nd,.codehilite .ne,.codehilite .nf,.codehilite .ni,.codehilite .nl,.codehilite .nn,.codehilite .nt,.codehilite .nv,.codehilite .nx,.codehilite .bp,.codehilite .fm,.codehilite .py{color:#fff}.codehilite .p{color:#E0E0E1}.codehilite .s,.codehilite .s1,.codehilite .s2,.codehilite .sa,.codehilite .sb,.codehilite .sc,.codehilite .dl,.codehilite .sd,.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sr,.codehilite .ss,.codehilite .sx{color:#28B86A}.codehilite{background:transparent;position:relative}.codehilite .btn-group{top:1rem;right:1rem;position:absolute}.multicode .codehilite .btn-group{top:70px;right:20px}.CodeMirror{font-family:"Space Mono",monospace;height:300px;background-color:#232325;margin:16px 0;border-radius:4px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:2rem 0}.CodeMirror pre{padding:0 2rem 0 1rem}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#000}.CodeMirror-gutters{background-color:#232325;white-space:nowrap}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #fff;z-index:3}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid #838386}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#838386;z-index:1}.cm-tab{display:inline-block}.cm-s-default .cm-keyword{color:#FF6719}.cm-s-default .cm-atom{color:#FF6719}.cm-s-default .cm-number{color:#19A3FF}.cm-s-default .cm-def{color:#19A3FF}.cm-s-default .cm-variable{color:#fff}.cm-s-default .cm-variable-2{color:#fff}.cm-s-default .cm-variable-3{color:#fff}.cm-s-default .cm-property{color:#fff}.cm-s-default .cm-operator{color:#fff}.cm-s-default .cm-comment{color:#838386}.cm-s-default .cm-string{color:#28B86A}.cm-s-default .cm-string-2{color:#28B86A}.cm-s-default .cm-meta{color:#838386}.cm-s-default .cm-qualifier{color:#838386}.cm-s-default .cm-builtin{color:#28B86A}.cm-s-default .cm-bracket{color:#fff}.cm-s-default .cm-tag{color:#fff}.cm-s-default .cm-attribute{color:#fff}.cm-s-default .cm-header{color:#19A3FF}.cm-s-default .cm-quote{color:#28B86A}.cm-s-default .cm-hr{color:#838386}.cm-s-default .cm-link{color:#B2E0FF}.cm-negative{color:#fff}.cm-positive{color:#fff}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-s-default .cm-error{color:#FF198B}.cm-invalidchar{color:#FF198B}div.CodeMirror span.CodeMirror-matchingbracket{color:#7919FF}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#FAFF19}.CodeMirror-activeline-background{background:#232325}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#232325;color:#fff}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;padding-right:30px;height:100%;outline:none;position:relative;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-sizer{position:relative}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;-moz-box-sizing:content-box;box-sizing:content-box;padding-bottom:30px;margin-bottom:-32px;display:inline-block;*zoom:1;*display:inline}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-code pre{border-right:30px solid transparent;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.CodeMirror-wrap .CodeMirror-code pre{border-right:none;width:auto}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-right:none;width:0}.CodeMirror-focused div.CodeMirror-cursor{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,0.4)}.CodeMirror span{*vertical-align:text-bottom}@media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid black;border-radius:4px 4px 4px 4px;color:black;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")}.CodeMirror-lint-mark-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=")}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-multiple{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.content img{max-width:100%;height:auto}.content img .dactyl_badge{width:initial}.content svg{max-width:100%}.content .floating-diagram{margin:0.5rem;float:left}.content li{clear:left}html:not(.light) .content svg[fill="black"]{fill:#fff;stroke:#fff}html:not(.light) .content svg[fill="black"] *[fill="white"]{fill:#000}html:not(.light) .content svg[fill="black"] *[stroke="white"]{stroke:#000}html:not(.light) .content svg[fill="black"] *[fill="black"]{fill:#fff}html:not(.light) .content svg[fill="black"] *[stroke="black"]{stroke:#fff}html:not(.light) .content svg[fill="black"] g[fill="blue"]{fill:#19A3FF}html:not(.light) .content svg[fill="black"] g[stroke="blue"]{stroke:#19A3FF}html:not(.light) .content svg[fill="black"] g[fill="rgb(120,120,120)"]{fill:#E0E0E1}html:not(.light) .content svg[fill="black"] g[stroke="rgb(120,120,120)"]{stroke:#E0E0E1}html:not(.light) .content svg[fill="black"] g[fill="rgb(200,200,200)"]{fill:#343437}html:not(.light) .content svg[fill="black"] g[fill="rgb(70,70,70)"]{fill:#838386}html:not(.light) .content svg[fill="black"] g[stroke="rgb(70,70,70)"]{stroke:#838386}html:not(.light) .content svg[fill="black"] g[fill="rgb(29,180,255)"]{fill:#9A52FF}html:not(.light) .content svg[fill="black"] g[stroke="rgb(29,180,255)"]{stroke:#9A52FF}html:not(.light) .content svg[fill="black"] rect[stroke="rgb(245,247,249)"]{stroke:#000}html:not(.light) .content svg[fill="black"] g[fill="lime"],html:not(.light) .content svg[fill="black"] g[fill="rgb(0,255,0)"]{fill:#9A52FF}html:not(.light) .content svg[fill="black"] g[stroke="lime"],html:not(.light) .content svg[fill="black"] g[stroke="rgb(0,255,0)"]{stroke:#9A52FF}html:not(.light) .content svg[fill="black"] g[fill="yellow"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FAFF19}html:not(.light) .content svg[fill="black"] g[fill="yellow"] path[stroke="black"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"] path[stroke="black"]{stroke:#000}html:not(.light) .content svg[fill="black"] g[fill="red"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FF198B}html:not(.light) .content svg[fill="black"] g[stroke="red"],html:not(.light) .content svg[fill="black"] g[stroke="rgb(255,255,0)"]{stroke:#FF198B}html:not(.light) .content svg[fill="black"] g[fill="yellow"]+g text,html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]+g text{fill:#000}html:not(.light) .content svg[fill="black"] g[fill="lime"]+g text{fill:#000}html:not(.light) .content svg[fill="none"] path[fill="#000000"]{fill:#fff}html:not(.light) .content svg[fill="none"] path[stroke="#000000"]{stroke:#fff}html:not(.light) .content svg[fill="none"] path[fill="#ffffff"]{fill:#000}html:not(.light) .content svg[fill="none"] path[stroke="#ffffff"]{stroke:#000}html:not(.light) .content svg[fill="none"] path[fill="#23292f"],html:not(.light) .content svg[fill="none"] path[fill="#23282f"]{fill:#fff}html:not(.light) .content svg[fill="none"] path[stroke="#23292f"],html:not(.light) .content svg[fill="none"] path[stroke="#23282f"]{stroke:#fff}html:not(.light) .content svg[fill="none"] path[fill="#2c3e50"],html:not(.light) .content svg[fill="none"] path[fill="#2b3e51"]{fill:#E0E0E1}html:not(.light) .content svg[fill="none"] path[stroke="#2c3e50"],html:not(.light) .content svg[fill="none"] path[stroke="#2b3e51"]{stroke:#E0E0E1}html:not(.light) .content svg[fill="none"] path[fill="#1c2835"]{fill:#F5F5F7}html:not(.light) .content svg[fill="none"] path[stroke="#1c2835"]{stroke:#F5F5F7}html:not(.light) .content svg[fill="none"] path[fill="#21aa47"]{fill:#32E685}html:not(.light) .content svg[fill="none"] path[stroke="#21aa47"]{stroke:#32E685}html:not(.light) .content svg[fill="none"] path[fill="#e64b3b"]{fill:#dc3545}html:not(.light) .content svg[fill="none"] path[stroke="#e64b3b"]{stroke:#dc3545}html:not(.light) .content svg[fill="none"] path[stroke="#27a2db"],html:not(.light) .content svg[fill="none"] path[stroke="#00aae4"]{stroke:#9A52FF}html:not(.light) .content svg[fill="none"] path[fill="#27a2db"],html:not(.light) .content svg[fill="none"] path[fill="#00aae4"]{fill:#9A52FF}html:not(.light) .content svg[fill="none"] path[fill="#e6e7e8"]{fill:#232325}html:not(.light) .content svg[fill="none"] path[stroke="#e6e7e8"]{stroke:#232325}html:not(.light) .content svg[fill="none"] path[stroke="#ffbf27"]{stroke:#D919FF}html:not(.light) .content svg[fill="none"] path[fill="#00ff00"]{fill:#32E685}html:not(.light) .content svg[fill="none"] path[stroke="#00ff00"]{stroke:#32E685}html:not(.light) .content svg[fill="none"] path[fill="#ff00ff"]{fill:#FF198B}html:not(.light) .content svg[fill="none"] path[stroke="#ff00ff"]{stroke:#FF198B}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#ffffff"]{stop-color:#343437}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#e6e7e8"]{stop-color:#232325}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#dbdcdd"]{stop-color:#000}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#b1b3b5"]{stop-color:#111112}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#29a1da"]{stop-color:#2DCF78}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#2789b9"]{stop-color:#5BEB9D}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#6bc1ec"]{stop-color:#ADF5CE}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#8ad6f4"]{stop-color:#84F0B6}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#fab913"]{stop-color:#F2B2FF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#fad26b"]{stop-color:#EA80FF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#f8a136"]{stop-color:#E24CFF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#f7931a"]{stop-color:#C000E5}html.light svg[fill="black"] g[fill="blue"]{fill:#006BB2}html.light svg[fill="black"] g[stroke="blue"]{stroke:#19A3FF}html.light svg[fill="black"] g[fill="rgb(120,120,120)"]{fill:#343437}html.light svg[fill="black"] g[stroke="rgb(120,120,120)"]{stroke:#343437}html.light svg[fill="black"] g[fill="rgb(200,200,200)"]{fill:#A2A2A4}html.light svg[fill="black"] g[fill="rgb(70,70,70)"]{fill:#343437}html.light svg[fill="black"] g[stroke="rgb(70,70,70)"]{stroke:#343437}html.light svg[fill="black"] g[fill="rgb(29,180,255)"]{fill:#19A3FF}html.light svg[fill="black"] g[stroke="rgb(29,180,255)"]{stroke:#006BB2}html.light svg[fill="black"] rect[stroke="rgb(245,247,249)"]{stroke:#FCFCFD}html.light svg[fill="black"] g[fill="lime"],html.light svg[fill="black"] g[fill="rgb(0,255,0)"]{fill:#5BEB9D}html.light svg[fill="black"] g[stroke="lime"],html.light svg[fill="black"] g[stroke="rgb(0,255,0)"]{stroke:#28B86A}html.light svg[fill="black"] g[fill="yellow"],html.light svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FCFF80}html.light svg[fill="black"] g[fill="red"],html.light svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FF4BA4}html.light svg[fill="black"] g[stroke="red"],html.light svg[fill="black"] g[stroke="rgb(255,255,0)"]{stroke:#FF198B}html.light svg[fill="none"] rect[fill="#111112"]{fill:#F5F5F7}html.light svg[fill="none"] path[fill="white"]{fill:#000}html.light svg[fill="none"] path[fill="#343437"]{fill:#C1C1C2}html.light svg[fill="none"] path[fill="#A2A2A4"],html.light svg[fill="none"] rect[fill="#A2A2A4"],html.light svg[fill="none"] ellipse[fill="#A2A2A4"]{fill:#454549}html.light svg[fill="none"] path[fill="#232325"]{fill:#E0E0E1}html.light svg[fill="none"] path[fill="#F5F5F7"]{fill:#111112}html.light svg[fill="none"] path[stroke="#F5F5F7"]{stroke:#111112}html.light svg[fill="none"] path[stroke="#FF198B"]{stroke:#B20058}html.light svg[fill="none"] linearGradient stop[stop-color="#F5F5F7"]{stop-color:#111112}html.light svg[fill="none"] linearGradient stop[stop-color="#C1C1C2"]{stop-color:#343437}.external-link::after{content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:16px;padding:0 4px 0 8px;width:16px;height:16px;background-position:center;transition:transform 100ms ease-in-out}.external-link:hover::after{transform:translate(3px, -3px)}.external-link .fa-external-link{display:none}.top-nav .dropdown .external-link::after,.xrpl-footer .external-link::after{background-position:left 6px bottom 1px;width:2rem}@-moz-document url-prefix(){@supports (animation: calc(0s)){.top-nav .dropdown .external-link::after,.xrpl-footer .external-link::after{background-position:left 8px bottom 2px}}}.top-nav .dropdown .external-link:hover::after,.xrpl-footer .external-link:hover::after{background-position:left 8px bottom 3px}.q-wrapper .external-link::after{background-position:left 0 bottom 7px}.q-wrapper .external-link:hover::after{background-position:left 4px bottom 11px}.li-links{position:relative;border-bottom:2px solid #454549}.li-links a{width:100%;padding:16px 0}.li-links a::after{position:absolute;right:4px;content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:1.5rem;padding:0 .5rem;background-position:left 0 bottom -.1rem;transition:background-position 100ms ease-in-out}.li-links a:hover::after{background-position:left .2rem bottom .1rem}.xrpl-footer{padding:7.5rem 2rem}.xrpl-footer .footer-nav .nav-item{text-shadow:#111112 0px 0px 2px, #111112 1px 1px 2px, #111112 2px 2px 3px, #111112 2px 2px 4px, #111112 2px 2px 5px, #111112 2px 2px 6px, #111112 -1px -1px 2px, #111112 -2px -2px 3px, #111112 -2px -2px 4px}@media (min-width: 992px){.xrpl-footer{background-image:url(../img/backgrounds/footer.svg);background-size:cover;background-repeat:no-repeat;background-position:bottom right}}@media (max-width: 991.98px){.xrpl-footer .col-lg:not(:first-child){margin-top:4rem}}.xrpl-footer h5{font-size:1rem;font-weight:600;color:#A2A2A4}.xrpl-footer .nav-link{padding:.75rem 0;line-height:1}.xrpl-footer .absolute-bottom-footer{font-size:10px;line-height:1rem}@media (max-width: 991.98px){.xrpl-footer .absolute-bottom-footer .copyright-license{margin-top:3rem}}.devportal-callout.tip,.devportal-callout.ヒント{border-color:#32E685}.devportal-callout.tip>strong:first-child:before,.devportal-callout.ヒント>strong:first-child:before{color:#32E685}.devportal-callout.note>strong:first-child:before,.devportal-callout.注記>strong:first-child:before{color:#19A3FF}.devportal-callout.note,.devportal-callout.注記{border-color:#19A3FF}.devportal-callout.caution,.devportal-callout.注意{border-color:#FAFF19}.devportal-callout.caution>strong:first-child:before,.devportal-callout.注意>strong:first-child:before{color:#FAFF19}.devportal-callout.warning,.devportal-callout.警告{border-color:#FF198B}.devportal-callout.warning>strong:first-child:before,.devportal-callout.警告>strong:first-child:before{color:#FF198B}blockquote,.devportal-callout{border-style:solid;border-radius:0;border-width:1px;border-left-width:4px;padding:5px;padding-left:25px;page-break-inside:avoid}.devportal-callout>strong:first-child{display:block;page-break-after:avoid}.devportal-callout.tip>strong:first-child:before{content:"\f058";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.note>strong:first-child:before{content:"\f05a";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.caution>strong:first-child:before{content:"\f071";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.warning>strong:first-child:before{content:"\f057";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.card,.cta-card,.q-wrapper{box-shadow:0px 5px 40px #000}#code-samples-deck .card{box-shadow:none;margin:0 2rem 5rem 2rem}#code-samples-deck .card-header{border-bottom:none;background-color:unset}#code-samples-deck .card-footer{background-color:unset;font-size:initial}#code-samples-deck .card-deck .card a{margin:0 2.5rem 5rem 2.5rem}#code-samples-deck .circled-logo{margin-left:-15px}@media (min-width: 992px){.code-contribute{width:75vw;position:relative;left:20%;right:20%;margin-left:-30vw;margin-right:-30vw}}.contribute::before{content:"";display:block;height:2px;width:100%;position:absolute;top:0}.contribute .dot{height:16px;width:16px;background-color:#111112;border-radius:50%;border:3px solid #FBFF4C;display:inline-block;position:absolute;top:-7px;left:-6px}@media (max-width: 991.98px){.contribute::before{left:0;height:100%;width:2px;top:15px}.contribute .dot{top:5px;left:-6px}}.contribute_1::before{background:-webkit-linear-gradient(left, #feff01, #ff2d9a)}.contribute_1 .dot{border-color:#FBFF4C}.contribute_2::before{background:-webkit-linear-gradient(left, #ff2d9a, #e24cff)}.contribute_2 .dot{border-color:#FF198B}.contribute_3::before{background:-webkit-linear-gradient(left, #e24cff, #9a52ff)}.contribute_3 .dot{border-color:#C000E5}.contribute_4::before{background:-webkit-linear-gradient(left, #9a52ff, #9a52ff)}.contribute_4 .dot{border-color:#9A52FF}.card>img{border-radius:8px 8px 0 0}.card-body>p,.card-body>p:not(:last-child){padding:0;margin-bottom:2rem}a.card{border:0;color:#fff}a.card:hover,a:hover .card-new{text-decoration:none}a.card:hover h3{text-decoration:underline}.circled-logo{background-color:#454549;border-radius:50%;padding:.65rem;width:50px;height:50px;margin-bottom:0.75rem;border:2px solid #232325}.circled-logo img{width:26px;height:26px;display:inline-block}.light .circled-logo{border:none}.card-deck{margin-top:2.5rem;margin-left:-1.25rem;margin-right:-1.25rem;margin-bottom:5rem;flex-grow:1}@media (min-width: 992px){.card-deck{margin-top:5rem}}.card-deck .card{flex-grow:0;flex-basis:100%;margin:0 1.25rem 5rem 1.25rem;background-position:bottom;background-repeat:no-repeat;background-size:contain}.card-deck.row-cols-1 .card{flex-basis:100%;min-height:264px}@media (min-width: 768px){.card-deck.row-cols-1 .card{min-height:347px}}@media (min-width: 1200px){.card-deck.row-cols-lg-3{margin-left:-2.5rem;margin-right:-2.5rem}}@media (min-width: 992px){.card-deck.row-cols-lg-3 .card{flex-basis:calc(33% - 2.5rem)}}@media (min-width: 1200px){.card-deck.row-cols-lg-3 .card{margin:0 2.5rem 5rem 2.5rem;flex-basis:calc(33% - 5rem)}}@media (min-width: 992px){.card-deck.row-cols-lg-4 .card{flex-basis:calc(25% - 2.5rem)}}.card-deck a.card{transition:all 0.35s ease-out;cursor:pointer}.card-deck a.card:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}.card-deck .card-footer{font-size:0;padding:1rem;background-position:bottom;background-repeat:no-repeat;background-size:cover;border-top:0}@media (max-width: 991.98px){.card-deck{margin-top:2rem}.card-deck .card-body{padding:1rem}.card-deck.row-cols-1 .card{margin:0.75rem 0.75rem 5rem 0.75rem;max-width:calc(100% - 1.5rem)}.card-deck.row-cols-2 .card{margin:.75rem;max-width:calc(50% - 1.5rem)}}.cta-card{text-align:center;background-color:#232325}.breadcrumbs-wrap{position:relative;z-index:11;padding:0 0 2rem 0}.interactive-block .breadcrumbs-wrap{padding:0}.breadcrumb-item+.breadcrumb-item:before{content:"\f105";font-family:FontAwesome;padding-right:5px}.breadcrumbs-wrap .breadcrumb{padding:0;margin-bottom:0;font-size:0.833em}.breadcrumb-item a{color:#E0E0E1;text-decoration:none}.breadcrumb-item a:hover{color:#9A52FF}.landing .container-fluid.section-hero,.landing .section-hero.container-sm,.landing .section-hero.container-md,.landing .section-hero.container-lg,.landing .section-hero.container-xl{padding:48px 0}.landing .content .children-display>ul>li,.landing .content .curated-links>ul>li{margin-top:24px}.landing .content .children-display li a,.landing .content .curated-links li a{font-weight:700;font-size:1.25rem;text-decoration:none}.landing .content .children-display li a:hover,.landing .content .curated-links li a:hover{text-decoration:underline}.landing section:first-of-type h1:first-child{margin-top:0;line-height:1.2}.landing .level-1,.landing .level-2{margin-top:0}.landing .curated-links ul,.landing .curated-links ol,.landing .children-display ul{padding-left:0;margin-bottom:0}.landing .section-hero .blurb{font-size:1.2em;line-height:1.71em}.landing .doc-index .level-1{list-style-type:disc;margin-left:1rem}.landing .doc-index .level-2{list-style-type:circle;margin-left:2rem}.landing .doc-index .level-3{list-style-type:square;margin-left:3rem}.landing .doc-index .level-4{list-style-type:disc;margin-left:4rem}.landing .doc-index .level-5{margin-left:5rem;list-style-type:circle}.landing .doc-index .level-6{margin-left:6rem;list-style-type:square}.landing p a,.landing h5 a{color:#9A52FF;font-weight:600}.landing p a:hover,.landing h5 a:hover{text-decoration:underline}.landing .display-4{margin-bottom:1.5rem}.landing #test-net-servers h3{font-size:1.4rem;font-weight:700}.landing #test-net-servers pre{overflow-x:auto}.landing section:first-of-type{border-top-width:0}.landing #main_content_wrapper{border-bottom:none}.landing .marketing-wrapper{margin-top:10rem;margin-bottom:6rem}@media (max-width: 767.98px){.landing .marketing-wrapper{margin-top:6rem}}.landing .nav .nav-link{padding:1rem 2rem 1rem 0;color:#E0E0E1;border-bottom:1px solid #232325;position:relative}.landing .nav .nav-link:hover{color:#9A52FF}.landing .nav .nav-link:not(.external-link)::after{content:" ";background-image:url(../img/icons/arrow-right-purple.svg);background-repeat:no-repeat;background-position:center;background-size:1rem;position:absolute;right:0;width:1.5rem;height:1.5rem;transition:all .2s ease}.landing .nav .nav-link:not(.external-link):hover::after{animation:arrowDance2 1.2s infinite}.landing .nav .nav-link.external-link::after{content:" ";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;position:absolute;background-position:center;background-size:.75rem;right:7px;width:1.5rem;height:1.5rem;transition:all .2s ease}.landing .nav .nav-link.external-link:hover::after{animation:arrowDanceDiag 1.2s infinite}.landing .card-body .nav .nav-link{border-bottom:1px solid #454549}.alert-info{color:white;background-color:#006BB2;border-width:0}.alert-info a{text-decoration:underline;color:white}.alert-info a:hover{color:#E0E0E1}.highlight-subcard{margin:1.5rem 0;padding:1rem;border:2px solid #fff;background:#111112}.interactive-block-inner{border:1px dashed #9A52FF;padding:10px;margin:5px}.interactive-block-ui>button{margin:10px 0}.interactive-block input:invalid{box-shadow:inset 0 0 5px 5px #FF198B}.interactive-block .breadcrumbs-wrap{margin-bottom:11px}.interactive-block .breadcrumb-item{margin-top:6px}.interactive-block .breadcrumb-item a{text-decoration:none}.interactive-block .breadcrumb-item.current a{font-weight:bold}.interactive-block .breadcrumb-item.active a{color:#B480FF}.interactive-block .breadcrumb-item.disabled a{color:#454549}.interactive-block .breadcrumb-item.done a:after{content:"\f058";font-family:FontAwesome;color:#E0E0E1;padding-right:5px;padding-left:5px}.interactive-block .waiting-for-tx{word-break:break-word}.ws-console{height:200px;overflow:auto}.status{cursor:help;padding:1px 2px;font-weight:normal;text-indent:0}.status.not_enabled{color:#FAFF19}.status.removed{color:#FF198B}.labels-wrap ul::before{content:"\f02c";font-family:FontAwesome;font-size:1.5rem}.labels-wrap .list-inline-item{margin-top:0.5rem}.pg-category{color:#A2A2A4}.pg-category::after{content:"\f105";font-family:FontAwesome;padding-left:5px}.label{border-radius:100px;border-width:0;padding:.5rem 1rem;font-weight:bold;text-decoration:none !important;text-align:center;white-space:nowrap;background-color:#111112;color:#C1C1C2}.label .badge-pill{width:24px;height:24px;border-radius:50px;margin-left:0.5rem;font-weight:400;line-height:23px;font-size:16px;padding:0;margin-top:-2px}html.light .label{background-color:#E0E0E1;color:#232325}html.light .label .badge-pill{color:#E0E0E1;background-color:#232325}html.light .label:hover{background-color:#C1C1C2;color:#111112}html.light .label:hover .badge-pill{color:#C1C1C2;background-color:#111112}.label .badge-pill{color:#111112;background-color:#C1C1C2}.label:hover{color:#E0E0E1;background-color:#232325}.label:hover .badge-pill{color:#232325;background-color:#E0E0E1}.label.label-accounts,.label.label-payment-channels,.label.label-amm,.label.label-アカウント,.label.label-payment-channel,.label.label-use-infrastructure,.label.label-use-security,.label.chip-indigo{background-color:#20004C;color:#B480FF}.label.label-accounts .badge-pill,.label.label-payment-channels .badge-pill,.label.label-amm .badge-pill,.label.label-アカウント .badge-pill,.label.label-payment-channel .badge-pill,.label.label-use-infrastructure .badge-pill,.label.label-use-security .badge-pill,.label.chip-indigo .badge-pill{color:#20004C;background-color:#B480FF}.label.label-accounts:hover,.label.label-payment-channels:hover,.label.label-amm:hover,.label.label-アカウント:hover,.label.label-payment-channel:hover,.label.label-use-infrastructure:hover,.label.label-use-security:hover,.label.chip-indigo:hover{background-color:#350080;color:#D2B2FF}.label.label-accounts:hover .badge-pill,.label.label-payment-channels:hover .badge-pill,.label.label-amm:hover .badge-pill,.label.label-アカウント:hover .badge-pill,.label.label-payment-channel:hover .badge-pill,.label.label-use-infrastructure:hover .badge-pill,.label.label-use-security:hover .badge-pill,.label.chip-indigo:hover .badge-pill{color:#350080;background-color:#D2B2FF}html.light .label.label-accounts,html.light .label.label-payment-channels,html.light .label.label-amm,html.light .label.label-アカウント,html.light .label.label-payment-channel,html.light .label.label-use-infrastructure,html.light .label.label-use-security,html.light .label.chip-indigo{background-color:#D2B2FF;color:#350080}html.light .label.label-accounts .badge-pill,html.light .label.label-payment-channels .badge-pill,html.light .label.label-amm .badge-pill,html.light .label.label-アカウント .badge-pill,html.light .label.label-payment-channel .badge-pill,html.light .label.label-use-infrastructure .badge-pill,html.light .label.label-use-security .badge-pill,html.light .label.chip-indigo .badge-pill{color:#D2B2FF;background-color:#350080}html.light .label.label-accounts:hover,html.light .label.label-payment-channels:hover,html.light .label.label-amm:hover,html.light .label.label-アカウント:hover,html.light .label.label-payment-channel:hover,html.light .label.label-use-infrastructure:hover,html.light .label.label-use-security:hover,html.light .label.chip-indigo:hover{background-color:#B480FF;color:#20004C}html.light .label.label-accounts:hover .badge-pill,html.light .label.label-payment-channels:hover .badge-pill,html.light .label.label-amm:hover .badge-pill,html.light .label.label-アカウント:hover .badge-pill,html.light .label.label-payment-channel:hover .badge-pill,html.light .label.label-use-infrastructure:hover .badge-pill,html.light .label.label-use-security:hover .badge-pill,html.light .label.chip-indigo:hover .badge-pill{color:#B480FF;background-color:#20004C}.label.label-blockchain,.label.label-xrp,.label.label-ブロックチェーン,.label.label-non-fungible-tokens-nfts,.label.label-use-nfts,.label.chip-green{background-color:#145C35;color:#84F0B6}.label.label-blockchain .badge-pill,.label.label-xrp .badge-pill,.label.label-ブロックチェーン .badge-pill,.label.label-non-fungible-tokens-nfts .badge-pill,.label.label-use-nfts .badge-pill,.label.chip-green .badge-pill{background-color:#84F0B6;color:#145C35}.label.label-blockchain:hover,.label.label-xrp:hover,.label.label-ブロックチェーン:hover,.label.label-non-fungible-tokens-nfts:hover,.label.label-use-nfts:hover,.label.chip-green:hover{background-color:#1E8A50;color:#ADF5CE}.label.label-blockchain:hover .badge-pill,.label.label-xrp:hover .badge-pill,.label.label-ブロックチェーン:hover .badge-pill,.label.label-non-fungible-tokens-nfts:hover .badge-pill,.label.label-use-nfts:hover .badge-pill,.label.chip-green:hover .badge-pill{background-color:#ADF5CE;color:#1E8A50}html.light .label.label-blockchain,html.light .label.label-xrp,html.light .label.label-ブロックチェーン,html.light .label.label-non-fungible-tokens-nfts,html.light .label.label-use-nfts,html.light .label.chip-green{background-color:#ADF5CE;color:#145C35}html.light .label.label-blockchain .badge-pill,html.light .label.label-xrp .badge-pill,html.light .label.label-ブロックチェーン .badge-pill,html.light .label.label-non-fungible-tokens-nfts .badge-pill,html.light .label.label-use-nfts .badge-pill,html.light .label.chip-green .badge-pill{color:#ADF5CE;background-color:#145C35}html.light .label.label-blockchain:hover,html.light .label.label-xrp:hover,html.light .label.label-ブロックチェーン:hover,html.light .label.label-non-fungible-tokens-nfts:hover,html.light .label.label-use-nfts:hover,html.light .label.chip-green:hover{background-color:#84F0B6;color:#000}html.light .label.label-blockchain:hover .badge-pill,html.light .label.label-xrp:hover .badge-pill,html.light .label.label-ブロックチェーン:hover .badge-pill,html.light .label.label-non-fungible-tokens-nfts:hover .badge-pill,html.light .label.label-use-nfts:hover .badge-pill,html.light .label.chip-green:hover .badge-pill{color:#84F0B6;background-color:#000}.label.label-checks,.label.label-core-server,.label.label-コアサーバー,.label.label-use-interoperability,.label.label-use-web_monetization,.label.chip-purple{background-color:#40004C;color:#EA80FF}.label.label-checks .badge-pill,.label.label-core-server .badge-pill,.label.label-コアサーバー .badge-pill,.label.label-use-interoperability .badge-pill,.label.label-use-web_monetization .badge-pill,.label.chip-purple .badge-pill{background-color:#EA80FF;color:#40004C}.label.label-checks:hover,.label.label-core-server:hover,.label.label-コアサーバー:hover,.label.label-use-interoperability:hover,.label.label-use-web_monetization:hover,.label.chip-purple:hover{background-color:#6B0080;color:#F2B2FF}.label.label-checks:hover .badge-pill,.label.label-core-server:hover .badge-pill,.label.label-コアサーバー:hover .badge-pill,.label.label-use-interoperability:hover .badge-pill,.label.label-use-web_monetization:hover .badge-pill,.label.chip-purple:hover .badge-pill{background-color:#F2B2FF;color:#6B0080}html.light .label.label-checks,html.light .label.label-core-server,html.light .label.label-コアサーバー,html.light .label.label-use-interoperability,html.light .label.label-use-web_monetization,html.light .label.chip-purple{background-color:#F2B2FF;color:#6B0080}html.light .label.label-checks .badge-pill,html.light .label.label-core-server .badge-pill,html.light .label.label-コアサーバー .badge-pill,html.light .label.label-use-interoperability .badge-pill,html.light .label.label-use-web_monetization .badge-pill,html.light .label.chip-purple .badge-pill{color:#F2B2FF;background-color:#6B0080}html.light .label.label-checks:hover,html.light .label.label-core-server:hover,html.light .label.label-コアサーバー:hover,html.light .label.label-use-interoperability:hover,html.light .label.label-use-web_monetization:hover,html.light .label.chip-purple:hover{background-color:#EA80FF;color:#40004C}html.light .label.label-checks:hover .badge-pill,html.light .label.label-core-server:hover .badge-pill,html.light .label.label-コアサーバー:hover .badge-pill,html.light .label.label-use-interoperability:hover .badge-pill,html.light .label.label-use-web_monetization:hover .badge-pill,html.light .label.chip-purple:hover .badge-pill{color:#EA80FF;background-color:#40004C}.label.label-cross-currency,.label.label-security,.label.label-複数通貨間,.label.label-セキュリティ,.label.label-use-gaming,.label.label-use-defi,.label.chip-yellow{background-color:#4B4C00;color:#FCFF80}.label.label-cross-currency .badge-pill,.label.label-security .badge-pill,.label.label-複数通貨間 .badge-pill,.label.label-セキュリティ .badge-pill,.label.label-use-gaming .badge-pill,.label.label-use-defi .badge-pill,.label.chip-yellow .badge-pill{background-color:#FCFF80;color:#4B4C00}.label.label-cross-currency:hover,.label.label-security:hover,.label.label-複数通貨間:hover,.label.label-セキュリティ:hover,.label.label-use-gaming:hover,.label.label-use-defi:hover,.label.chip-yellow:hover{background-color:#7D8000;color:#FDFFB2}.label.label-cross-currency:hover .badge-pill,.label.label-security:hover .badge-pill,.label.label-複数通貨間:hover .badge-pill,.label.label-セキュリティ:hover .badge-pill,.label.label-use-gaming:hover .badge-pill,.label.label-use-defi:hover .badge-pill,.label.chip-yellow:hover .badge-pill{background-color:#FDFFB2;color:#7D8000}html.light .label.label-cross-currency,html.light .label.label-security,html.light .label.label-複数通貨間,html.light .label.label-セキュリティ,html.light .label.label-use-gaming,html.light .label.label-use-defi,html.light .label.chip-yellow{background-color:#FDFFB2;color:#7D8000}html.light .label.label-cross-currency .badge-pill,html.light .label.label-security .badge-pill,html.light .label.label-複数通貨間 .badge-pill,html.light .label.label-セキュリティ .badge-pill,html.light .label.label-use-gaming .badge-pill,html.light .label.label-use-defi .badge-pill,html.light .label.chip-yellow .badge-pill{color:#FDFFB2;background-color:#7D8000}html.light .label.label-cross-currency:hover,html.light .label.label-security:hover,html.light .label.label-複数通貨間:hover,html.light .label.label-セキュリティ:hover,html.light .label.label-use-gaming:hover,html.light .label.label-use-defi:hover,html.light .label.chip-yellow:hover{background-color:#FCFF80;color:#4B4C00}html.light .label.label-cross-currency:hover .badge-pill,html.light .label.label-security:hover .badge-pill,html.light .label.label-複数通貨間:hover .badge-pill,html.light .label.label-セキュリティ:hover .badge-pill,html.light .label.label-use-gaming:hover .badge-pill,html.light .label.label-use-defi:hover .badge-pill,html.light .label.chip-yellow:hover .badge-pill{color:#FCFF80;background-color:#4B4C00}.label.label-decentralized-exchange,.label.label-smart-contracts,.label.label-transaction-sending,.label.label-分散型取引所,.label.label-スマートコントラクト,.label.label-トランザクション送信,.label.label-use-developer_tooling,.label.label-use-payments,.label.chip-blue{background-color:#002E4C;color:#80CCFF}.label.label-decentralized-exchange .badge-pill,.label.label-smart-contracts .badge-pill,.label.label-transaction-sending .badge-pill,.label.label-分散型取引所 .badge-pill,.label.label-スマートコントラクト .badge-pill,.label.label-トランザクション送信 .badge-pill,.label.label-use-developer_tooling .badge-pill,.label.label-use-payments .badge-pill,.label.chip-blue .badge-pill{background-color:#80CCFF;color:#002E4C}.label.label-decentralized-exchange:hover,.label.label-smart-contracts:hover,.label.label-transaction-sending:hover,.label.label-分散型取引所:hover,.label.label-スマートコントラクト:hover,.label.label-トランザクション送信:hover,.label.label-use-developer_tooling:hover,.label.label-use-payments:hover,.label.chip-blue:hover{background-color:#004D80;color:#B2E0FF}.label.label-decentralized-exchange:hover .badge-pill,.label.label-smart-contracts:hover .badge-pill,.label.label-transaction-sending:hover .badge-pill,.label.label-分散型取引所:hover .badge-pill,.label.label-スマートコントラクト:hover .badge-pill,.label.label-トランザクション送信:hover .badge-pill,.label.label-use-developer_tooling:hover .badge-pill,.label.label-use-payments:hover .badge-pill,.label.chip-blue:hover .badge-pill{background-color:#B2E0FF;color:#004D80}html.light .label.label-decentralized-exchange,html.light .label.label-smart-contracts,html.light .label.label-transaction-sending,html.light .label.label-分散型取引所,html.light .label.label-スマートコントラクト,html.light .label.label-トランザクション送信,html.light .label.label-use-developer_tooling,html.light .label.label-use-payments,html.light .label.chip-blue{background-color:#B2E0FF;color:#004D80}html.light .label.label-decentralized-exchange .badge-pill,html.light .label.label-smart-contracts .badge-pill,html.light .label.label-transaction-sending .badge-pill,html.light .label.label-分散型取引所 .badge-pill,html.light .label.label-スマートコントラクト .badge-pill,html.light .label.label-トランザクション送信 .badge-pill,html.light .label.label-use-developer_tooling .badge-pill,html.light .label.label-use-payments .badge-pill,html.light .label.chip-blue .badge-pill{color:#B2E0FF;background-color:#004D80}html.light .label.label-decentralized-exchange:hover,html.light .label.label-smart-contracts:hover,html.light .label.label-transaction-sending:hover,html.light .label.label-分散型取引所:hover,html.light .label.label-スマートコントラクト:hover,html.light .label.label-トランザクション送信:hover,html.light .label.label-use-developer_tooling:hover,html.light .label.label-use-payments:hover,html.light .label.chip-blue:hover{background-color:#80CCFF;color:#002E4C}html.light .label.label-decentralized-exchange:hover .badge-pill,html.light .label.label-smart-contracts:hover .badge-pill,html.light .label.label-transaction-sending:hover .badge-pill,html.light .label.label-分散型取引所:hover .badge-pill,html.light .label.label-スマートコントラクト:hover .badge-pill,html.light .label.label-トランザクション送信:hover .badge-pill,html.light .label.label-use-developer_tooling:hover .badge-pill,html.light .label.label-use-payments:hover .badge-pill,html.light .label.chip-blue:hover .badge-pill{color:#80CCFF;background-color:#002E4C}.label.label-escrow,.label.label-tokens,.label.label-development,.label.label-トークン,.label.label-開発,.label.label-use-wallet,.label.label-use-sustainability,.label.chip-orange{background-color:#4C1A00;color:#FFAA80}.label.label-escrow .badge-pill,.label.label-tokens .badge-pill,.label.label-development .badge-pill,.label.label-トークン .badge-pill,.label.label-開発 .badge-pill,.label.label-use-wallet .badge-pill,.label.label-use-sustainability .badge-pill,.label.chip-orange .badge-pill{background-color:#FFAA80;color:#4C1A00}.label.label-escrow:hover,.label.label-tokens:hover,.label.label-development:hover,.label.label-トークン:hover,.label.label-開発:hover,.label.label-use-wallet:hover,.label.label-use-sustainability:hover,.label.chip-orange:hover{background-color:#802B00;color:#FFCCB2}.label.label-escrow:hover .badge-pill,.label.label-tokens:hover .badge-pill,.label.label-development:hover .badge-pill,.label.label-トークン:hover .badge-pill,.label.label-開発:hover .badge-pill,.label.label-use-wallet:hover .badge-pill,.label.label-use-sustainability:hover .badge-pill,.label.chip-orange:hover .badge-pill{background-color:#FFCCB2;color:#802B00}html.light .label.label-escrow,html.light .label.label-tokens,html.light .label.label-development,html.light .label.label-トークン,html.light .label.label-開発,html.light .label.label-use-wallet,html.light .label.label-use-sustainability,html.light .label.chip-orange{background-color:#FFCCB2;color:#802B00}html.light .label.label-escrow .badge-pill,html.light .label.label-tokens .badge-pill,html.light .label.label-development .badge-pill,html.light .label.label-トークン .badge-pill,html.light .label.label-開発 .badge-pill,html.light .label.label-use-wallet .badge-pill,html.light .label.label-use-sustainability .badge-pill,html.light .label.chip-orange .badge-pill{color:#FFCCB2;background-color:#802B00}html.light .label.label-escrow:hover,html.light .label.label-tokens:hover,html.light .label.label-development:hover,html.light .label.label-トークン:hover,html.light .label.label-開発:hover,html.light .label.label-use-wallet:hover,html.light .label.label-use-sustainability:hover,html.light .label.chip-orange:hover{background-color:#FFAA80;color:#4C1A00}html.light .label.label-escrow:hover .badge-pill,html.light .label.label-tokens:hover .badge-pill,html.light .label.label-development:hover .badge-pill,html.light .label.label-トークン:hover .badge-pill,html.light .label.label-開発:hover .badge-pill,html.light .label.label-use-wallet:hover .badge-pill,html.light .label.label-use-sustainability:hover .badge-pill,html.light .label.chip-orange:hover .badge-pill{color:#FFAA80;background-color:#4C1A00}.label.label-fees,.label.label-payments,.label.label-data-retention,.label.label-手数料,.label.label-支払い,.label.label-データ保持,.label.label-use-exchanges,.label.label-use-custody,.label.chip-magenta{background-color:#4C0026;color:#FF80BF}.label.label-fees .badge-pill,.label.label-payments .badge-pill,.label.label-data-retention .badge-pill,.label.label-手数料 .badge-pill,.label.label-支払い .badge-pill,.label.label-データ保持 .badge-pill,.label.label-use-exchanges .badge-pill,.label.label-use-custody .badge-pill,.label.chip-magenta .badge-pill{background-color:#FF80BF;color:#4C0026}.label.label-fees:hover,.label.label-payments:hover,.label.label-data-retention:hover,.label.label-手数料:hover,.label.label-支払い:hover,.label.label-データ保持:hover,.label.label-use-exchanges:hover,.label.label-use-custody:hover,.label.chip-magenta:hover{background-color:#80003F;color:#FFB2D8}.label.label-fees:hover .badge-pill,.label.label-payments:hover .badge-pill,.label.label-data-retention:hover .badge-pill,.label.label-手数料:hover .badge-pill,.label.label-支払い:hover .badge-pill,.label.label-データ保持:hover .badge-pill,.label.label-use-exchanges:hover .badge-pill,.label.label-use-custody:hover .badge-pill,.label.chip-magenta:hover .badge-pill{background-color:#FFB2D8;color:#80003F}html.light .label.label-fees,html.light .label.label-payments,html.light .label.label-data-retention,html.light .label.label-手数料,html.light .label.label-支払い,html.light .label.label-データ保持,html.light .label.label-use-exchanges,html.light .label.label-use-custody,html.light .label.chip-magenta{background-color:#FFB2D8;color:#80003F}html.light .label.label-fees .badge-pill,html.light .label.label-payments .badge-pill,html.light .label.label-data-retention .badge-pill,html.light .label.label-手数料 .badge-pill,html.light .label.label-支払い .badge-pill,html.light .label.label-データ保持 .badge-pill,html.light .label.label-use-exchanges .badge-pill,html.light .label.label-use-custody .badge-pill,html.light .label.chip-magenta .badge-pill{color:#FFB2D8;background-color:#80003F}html.light .label.label-fees:hover,html.light .label.label-payments:hover,html.light .label.label-data-retention:hover,html.light .label.label-手数料:hover,html.light .label.label-支払い:hover,html.light .label.label-データ保持:hover,html.light .label.label-use-exchanges:hover,html.light .label.label-use-custody:hover,html.light .label.chip-magenta:hover{background-color:#FF80BF;color:#4C0026}html.light .label.label-fees:hover .badge-pill,html.light .label.label-payments:hover .badge-pill,html.light .label.label-data-retention:hover .badge-pill,html.light .label.label-手数料:hover .badge-pill,html.light .label.label-支払い:hover .badge-pill,html.light .label.label-データ保持:hover .badge-pill,html.light .label.label-use-exchanges:hover .badge-pill,html.light .label.label-use-custody:hover .badge-pill,html.light .label.chip-magenta:hover .badge-pill{color:#FF80BF;background-color:#4C0026}.tag-cloud .list-inline-item{margin-top:1.5rem}#tx-sender-history .list-group-item{font-size:small;color:#454549}.response-metadata .timestamp{color:#454549;position:relative;top:16px}.throbber{width:24px;height:24px}#connection-status .card-body{border-left:0}#connection-status-item.active{background-color:#32E685;border-color:#32E685}.api-input-area .btn-group>.send-request.btn{border-bottom-right-radius:4px;border-top-right-radius:4px}#tx-sender-history ul{overflow:auto;height:220px;border:1px solid #E0E0E1}#pp_progress small{margin-top:.5rem}.page-tx-sender .input-group .form-control,.interactive-block-ui .input-group .form-control{flex:1 1 20%;height:auto}.bootstrap-growl{max-width:90vw !important;overflow:hidden}.list-group-item-danger,#tx-sender-history .list-group-item-danger{background-color:#FF80BF;color:#000}.list-group-item-danger a,#tx-sender-history .list-group-item-danger a{color:#000}.list-group-item-danger a:hover,#tx-sender-history .list-group-item-danger a:hover{color:#000;text-decoration:underline}.rpc-tool .main h1::before,.rpc-tool .main h2::before,.rpc-tool .main h3::before{display:none}@media print{.multicode>div{display:block !important}.multicode>em,.multicode>p>em{display:block !important;page-break-after:avoid}.multicode>p{display:block !important}.code_toggler{display:none}pre{white-space:pre-wrap;max-height:none !important;overflow:visible;page-break-inside:auto;word-wrap:break-word}pre code{white-space:pre-wrap !important;color:#22252B !important}code{white-space:pre-wrap !important;color:#22252B !important}.codehilite .n,.codehilite .na,.codehilite .nb,.codehilite .nc,.codehilite .nd,.codehilite .ne,.codehilite .nf,.codehilite .ni,.codehilite .nl,.codehilite .nn,.codehilite .nt,.codehilite .nv,.codehilite .nx,.codehilite .bp,.codehilite .fm,.codehilite .py{color:#22252B}.content a[title="Source"]{float:none}header,footer,aside{display:none !important}.navbar{display:none !important}.content,#main_content_body{position:static;display:block;width:auto;height:auto;color:black !important;max-width:100%;overflow:visible !important}body{overflow:visible;background:#fff}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{color:black}.interactive-block{display:none}.container{margin-top:1rem !important}#main_content_wrapper{margin-top:0}#main_content_body::before{display:none}.xrp-ledger-dev-portal.sidebar-primary .main{border:0}.sidebar-primary .row{display:block}#feedback-content{display:none !important}.jump-to-top{display:none !important}}#home-purple{position:absolute;left:0;top:-400px}#home-green{position:absolute;right:-3px;top:60px}.sidelinks:hover{color:#9A52FF}.sidelinks.active{color:#9A52FF;font-weight:bold}.page-home #home-hero-graphic{content:url("../img/home-hero.svg");margin-left:auto;width:856px;margin-right:auto;margin-bottom:24px;max-width:100%}.page-home #benefits-list #public{content:url("../img/icons/public.svg")}.page-home #benefits-list #streamlined{content:url("../img/icons/streamlined.svg")}.page-home #benefits-list #performance{content:url("../img/icons/performance.svg")}.page-home #benefits-list #low-cost{content:url("../img/icons/low-cost.svg")}.page-home #benefits-list #community{content:url("../img/icons/community.svg")}.page-home #benefits-list #reliability{content:url("../img/icons/reliability.svg")}.page-home #advanced-features .card:nth-child(1) .card-footer{background-image:url("../img/cards/3col-pink-purple.svg")}.page-home #advanced-features .card:nth-child(2) .card-footer{background-image:url("../img/cards/3col-neutral-blue.svg")}.page-home #advanced-features .card:nth-child(3) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.page-home #advanced-features .card:nth-child(4) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.page-home #advanced-features .card:nth-child(5) .card-footer{background-image:url("../img/cards/3col-purple-blue-2.svg")}.page-home #get-started .card:nth-child(1) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.page-home #get-started .card:nth-child(2) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.page-home #get-started .card:nth-child(3) .card-footer{background-image:url("../img/cards/3col-purple-blue-green.svg")}.page-home #get-started .card:nth-child(4) .card-footer{background-image:url("../img/cards/3col-light-blue.svg")}.page-home #get-started .card:nth-child(5) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.cta{position:absolute}.cta-top-left{top:0;left:0}.cta-bottom-right{bottom:0;right:0}.landing-bg{opacity:0.6}@media (min-width: 768px){.landing-bg{opacity:1.0}}.landing-builtin-bg::before{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background-repeat:no-repeat;background-position-x:left;background-position-y:top;opacity:0.6}@media (min-width: 768px){.landing-builtin-bg::before{opacity:1.0}}#xrp-overview-blue{position:absolute;top:0;left:0}@media (max-width: 767.98px){#xrp-mark-overview{height:40px;margin-top:16px}}#wallets #wallet-ledger{content:url("../img/wallets/ledger.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-secalot{content:url("../img/wallets/secalot.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-trezor{content:url("../img/wallets/trezor.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-xumm{content:url("../img/wallets/xumm.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-trust{content:url("../img/wallets/trust.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-gatehub{content:url("../img/wallets/gatehub.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-towo{content:url("../img/wallets/towo.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-keystone{content:url("../img/wallets/keystone.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-dcent{content:url("../img/wallets/dcent.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#top-exchanges #exch-bitstamp{content:url("../img/exchanges/bitstamp.svg")}#top-exchanges #exch-kraken{content:url("../img/exchanges/kraken.svg")}#top-exchanges #exch-cex-io{content:url("../img/exchanges/cex-io.svg")}#top-exchanges #exch-liquid{content:url("../img/exchanges/liquid.svg")}#top-exchanges #exch-lmax{content:url("../img/exchanges/lmax.svg")}#top-exchanges #exch-bitfinex{content:url("../img/exchanges/bitfinex.svg")}#top-exchanges #exch-etoro{content:url("../img/exchanges/etoro.svg")}#top-exchanges #exch-bittrex{content:url("../img/exchanges/bittrex.png")}#top-exchanges #exch-currency-com{content:url("../img/exchanges/currency-com.png")}#top-exchanges #exch-ftx{content:url("../img/exchanges/ftx.png")}#xrpl-overview-purple{position:absolute;top:40px;left:0}@media (max-width: 767.98px){#xrpl-overview-purple{top:0;left:-20vw}}#xrpl-overview-orange{position:absolute;top:80px;right:-4px}#use-cases-orange{position:absolute;top:-480px;right:-4px}#validator-graphic{content:url(../img/validators.svg)}.page-uses .container-new{padding-left:16px;padding-right:16px}.page-uses h1{font-size:42px}.page-uses::before{transform:scaleX(-1);background-image:url(../img/backgrounds/use-cases-blue.svg)}.page-uses .card-grid{grid-gap:8px}.page-uses .card-grid img{max-height:40px}.page-uses .modal{padding:0}.page-uses .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#000;background-clip:padding-box;border:none;border-radius:0;box-shadow:none;outline:none;background:#111112}.page-uses .modal-header{border:none;background:#111112;box-shadow:0px 1px 2px #000}.page-uses .modal-header .cancel .chevron{transform:rotate(90deg)}.page-uses .modal-header .apply .chevron{transform:rotate(-90deg)}.page-uses .modal-footer{border:none;background:#111112;box-shadow:0px -1px 2px #000;align-items:unset;padding:0.75rem;flex-direction:column;flex-wrap:wrap}.page-uses .card-title{margin-bottom:0.5rem;line-height:26px}.page-uses .card-uses{padding:16px;margin:0;text-decoration:none;transition:all 0.35s ease-out}.page-uses .card-uses:hover{text-decoration:none;color:#E0E0E1;transform:translateY(-16px);text-decoration:none}.page-uses .card-body{background:#232325;border-radius:8px;height:100%;padding:32px;margin:0}.page-uses .page-events .label{font-weight:normal;font-size:14px;margin:0;padding-left:26px}.page-uses .category-header{font-weight:bold;color:#C1C1C2}.page-uses .category-checkbox{display:flex;align-items:center}.page-uses .category-checkbox label{font-weight:normal;font-size:14px;margin:0;padding-left:26px}.page-uses .category_count{padding:0px 8px;width:24px;height:16px;background:#350080;border-radius:100px;font-weight:600;font-size:12px;line-height:16px;color:#B480FF}.page-uses .category_sidebar{position:sticky;top:10px}.page-uses #infrastructure{content:url("../img/icons/usecases/ic_infrastructure.png")}.page-uses #developer_tooling{content:url("../img/icons/usecases/ic_developer_tooling.png")}.page-uses #interoperability{content:url("../img/icons/usecases/ic_interoperability.png")}.page-uses #wallet{content:url("../img/icons/usecases/ic_wallet.png")}.page-uses #nfts{content:url("../img/icons/usecases/ic_nfts.png")}.page-uses #exchanges{content:url("../img/icons/usecases/ic_exchanges.png")}.page-uses #gaming{content:url("../img/icons/usecases/ic_gaming.png")}.page-uses #security{content:url("../img/icons/usecases/ic_security.png")}.page-uses #payments{content:url("../img/icons/usecases/ic_payments.png")}.page-uses #web_monetization{content:url("../img/icons/usecases/ic_web_monetization.png")}.page-uses #sustainability{content:url("../img/icons/usecases/ic_sustainability.png")}.page-uses #cbdc{content:url("../img/icons/usecases/ic_cbdc.png")}.page-uses #custody{content:url("../img/icons/usecases/ic_custody.png")}.page-uses #defi{content:url("../img/icons/usecases/ic_defi.png")}.page-uses #use_case_companies_list #bithomp .biz-logo{max-height:40px;content:url("../img/uses/bithomp.svg")}.page-uses #use_case_companies_list #onthedex .biz-logo{max-height:40px;content:url("../img/uses/onthedex.svg")}.page-uses #use_case_companies_list #gatehub .biz-logo{max-height:40px;content:url("../img/uses/gatehub.svg")}.page-uses #use_case_companies_list #towo-labs .biz-logo{max-height:40px;content:url("../img/uses/towo-labs.svg")}.page-uses #use_case_companies_list #xrp-toolkit .biz-logo{max-height:40px;content:url("../img/uses/xrp-toolkit.svg")}.page-uses #use_case_companies_list #xrpl-org-ledger-explorer .biz-logo{max-height:40px;content:url("../img/uses/xrpl-org-ledger-explorer.svg")}.page-uses #use_case_companies_list #xrpl-rosetta .biz-logo{max-height:40px;content:url("../img/uses/xrpl-rosetta.svg")}.page-uses #use_case_companies_list #xrpscan .biz-logo{max-height:40px;content:url("../img/uses/xrpscan.svg")}.page-uses #use_case_companies_list #evernode .biz-logo{max-height:40px;content:url("../img/uses/evernode.svg")}.page-uses #use_case_companies_list #cryptum .biz-logo{max-height:40px;content:url("../img/uses/cryptum.svg")}.page-uses #use_case_companies_list #x-tokenize .biz-logo{max-height:40px;content:url("../img/uses/x-tokenize.svg")}.page-uses #use_case_companies_list #multichain .biz-logo{max-height:40px;content:url("../img/uses/multichain.svg")}.page-uses #use_case_companies_list #xumm-wallet .biz-logo{max-height:40px;content:url("../img/uses/xumm-wallet.svg")}.page-uses #use_case_companies_list #gem-wallet .biz-logo{max-height:40px;content:url("../img/uses/gem-wallet.svg")}.page-uses #use_case_companies_list #aesthetes .biz-logo{max-height:40px;content:url("../img/uses/aesthetes.svg")}.page-uses #use_case_companies_list #audiotarky .biz-logo{max-height:40px;content:url("../img/uses/audiotarky.svg")}.page-uses #use_case_companies_list #xrp-cafe .biz-logo{max-height:40px;content:url("../img/uses/xrp-cafe.svg")}.page-uses #use_case_companies_list #nft-master .biz-logo{max-height:40px;content:url("../img/uses/nft-master.svg")}.page-uses #use_case_companies_list #onxrp .biz-logo{max-height:40px;content:url("../img/uses/onxrp.svg")}.page-uses #use_case_companies_list #peerkat .biz-logo{max-height:40px;content:url("../img/uses/peerkat.svg")}.page-uses #use_case_companies_list #sologenic-nft .biz-logo{max-height:40px;content:url("../img/uses/sologenic-nft.svg")}.page-uses #use_case_companies_list #sologenic-dex .biz-logo{max-height:40px;content:url("../img/uses/sologenic-dex.svg")}.page-uses #use_case_companies_list #xp-market .biz-logo{max-height:40px;content:url("../img/uses/xp-market.svg")}.page-uses #use_case_companies_list #ledger-city .biz-logo{max-height:40px;content:url("../img/uses/ledger-city.svg")}.page-uses #use_case_companies_list #forte .biz-logo{max-height:40px;content:url("../img/uses/forte.svg")}.page-uses #use_case_companies_list #anchain-ai .biz-logo{max-height:40px;content:url("../img/uses/anchain-ai.svg")}.page-uses #use_case_companies_list #coil .biz-logo{max-height:40px;content:url("../img/uses/coil.svg")}.page-uses #use_case_companies_list #carbonland-trust .biz-logo{max-height:40px;content:url("../img/uses/carbonland-trust.svg")}.page-uses #use_case_companies_list #casino-coin .biz-logo{max-height:40px;content:url("../img/uses/casino-coin.svg")}.page-uses #use_case_companies_list #bitgo .biz-logo{max-height:40px;content:url("../img/uses/bitgo.svg")}.page-uses #use_case_companies_list #bitpay .biz-logo{max-height:40px;content:url("../img/uses/bitpay.svg")}.page-uses #use_case_companies_list #ripples-on-demand-liquidity .biz-logo{max-height:40px;content:url("../img/uses/ripples-on-demand-liquidity.svg")}.page-uses #use_case_companies_list #ripples-cbdc-platform .biz-logo{max-height:40px;content:url("../img/uses/ripples-cbdc-platform.svg")}@media (min-width: 992px){.page-uses h1{font-size:62px}.page-uses .container-new{padding-left:64px;padding-right:64px}.page-uses .card-grid img{max-height:48px}.page-uses .card-grid{grid-gap:48px}.page-uses .card-uses{padding:24px}}#history-orange{position:absolute;top:0;right:-4px}#history-purple{position:absolute;top:-480px;left:-4px}.hidden-section{overflow:hidden;visibility:hidden;height:0}.hidden-section.show{overflow:auto;visibility:visible;height:auto}#impact-green{position:absolute;top:0;left:-4px;rotate:180deg}#impact-purple{position:absolute;top:100px;right:-4px}#impact-magenta{position:absolute;top:100px;right:-4px}#foundation-magenta{position:absolute;top:0px;left:0px}#foundation-orange{position:absolute;top:40px;right:-4px}.page-impact #map-light{display:none}.page-impact #map-dark{display:block}.page-impact .connect-list #connect-01{content:url("../img/impact/connect-01.svg")}.page-impact .connect-list #connect-02{content:url("../img/impact/connect-02.svg")}.page-impact .connect-list #connect-03{content:url("../img/impact/connect-03.svg")}.page-impact .connect-list #connect-04{content:url("../img/impact/connect-04.svg")}.page-funding .funding-list #funding-01{content:url("../img/funding/funding-01.svg")}.page-funding .funding-list #funding-02{content:url("../img/funding/funding-02.svg")}.page-funding .funding-list #funding-03{content:url("../img/funding/funding-03.svg")}.page-funding .funding-list #funding-04{content:url("../img/funding/funding-04.svg")}.page-funding #funding-orange{position:absolute;top:132px;left:-4px}@media (min-width: 992px){.page-funding .funding-box{min-height:200px}}.page-ambassadors #benefits-list #benefits-01{content:url("../img/ambassadors/benefits-01.svg")}.page-ambassadors #benefits-list #benefits-02{content:url("../img/ambassadors/benefits-02.svg")}.page-ambassadors #benefits-list #benefits-03{content:url("../img/ambassadors/benefits-03.svg")}.page-ambassadors #benefits-list #benefits-04{content:url("../img/ambassadors/benefits-04.svg")}.page-ambassadors #benefits-list #benefits-05{content:url("../img/ambassadors/benefits-05.svg")}.page-ambassadors #benefits-list #benefits-06{content:url("../img/ambassadors/benefits-06.svg")}.page-ambassadors #eligibility-list #eligibility-01{content:url("../img/ambassadors/eligibility-01.svg")}.page-ambassadors #eligibility-list #eligibility-02{content:url("../img/ambassadors/eligibility-02.svg")}.page-ambassadors #eligibility-list #eligibility-03{content:url("../img/ambassadors/eligibility-03.svg")}.page-ambassadors #eligibility-list #eligibility-04{content:url("../img/ambassadors/eligibility-04.svg")}.page-ambassadors #eligibility-list #eligibility-05{content:url("../img/ambassadors/eligibility-05.svg")}.page-ambassadors .btn{padding:.75rem}.page-ambassadors #container-scroll{height:160px;position:relative;overflow:hidden;margin-top:80px;margin-bottom:64px}.page-ambassadors .photobanner{position:absolute;top:0px;left:0px;overflow:hidden;white-space:nowrap;animation:bannermove 40s linear infinite}.page-ambassadors .photobanner-bottom{top:112px}.page-ambassadors .photobanner img{margin:0 0.5em}@keyframes bannermove{0%{transform:translate(0, 0)}100%{transform:translate(-50%, 0)}}.page-ambassadors #carouselSlidesOnly{height:392px;margin-bottom:40px}@media (min-width: 992px){.page-ambassadors #carouselSlidesOnly{height:320px;margin-bottom:104px}}.page-ambassadors h6{font-size:1.25rem}.page-ambassadors .btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right-purple.svg);vertical-align:middle;padding-left:8px;transition:transform 0.3s ease-out}.page-ambassadors .btn-arrow:hover{text-decoration:none;background:none !important;border:none}.page-ambassadors .btn-arrow:hover::after{background-position:left 4px bottom 4px;transform:translateX(4px)}#community-magenta{position:absolute;top:0px;left:0px}#community-purple{position:absolute;top:160px;right:0px}.page-events #event-hero-image{height:100%;min-height:209px;background:url(../img/events/event-hero1@2x.png);background-size:contain;background-repeat:no-repeat;background-position:center}.page-events #events-orange{position:absolute;top:0px;right:0px}.page-events .event-hero{color:#F5F5F7}.page-events .event-hero p{font-weight:500;font-size:24px;line-height:32px}.page-events .event-save-date{color:#fff;font-weight:bold;font-size:20px;line-height:26px}.page-events .event-small-gray{color:#E0E0E1}.page-events .btn{padding:.75rem}.page-events .event-card{max-width:311px;margin:32px auto;transition:all 0.35s ease-out;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-clip:border-box;background-color:#232325;box-shadow:0px 5px 40px #000;border:1px solid rgba(0,0,0,0.125);border-radius:8px;font-size:16px;line-height:24px;color:#E0E0E1}.page-events .event-card .event-card-header{position:relative;height:176px;background-size:contain !important;width:100%;border-radius:8px 8px 0 0}.page-events .event-card .event-card-title{position:absolute;bottom:32px;padding:0 32px;color:#F5F5F7;font-weight:bold;font-size:20px;line-height:28px}.page-events .event-card .event-card-body{padding:32px}.page-events .event-card .event-card-footer{padding:0 32px 32px}.page-events .event-card .event-card-footer .icon::before{height:24px;width:24px;content:"";margin-right:8px;background-size:contain;background-repeat:no-repeat}.page-events .event-card .icon-date::before{background:url(../img/events/event-date.svg)}.page-events .event-card .icon-location::before{background:url(../img/events/event-location.svg)}@media (min-width: 992px){.page-events .event-card{max-width:347px;margin:32px}.page-events .event-card-header{height:197px !important}}.page-events a.event-card:hover{transform:translateY(-16px);text-decoration:none}.page-events label{margin:0;padding-left:8px;color:#fff}.page-events .events-filter h6{font-size:16px}.page-events .events-filter{height:20px;width:20px}.page-events .events-filter[type="checkbox"]::before{position:relative;display:block;width:20px;height:20px;content:"";background:#111112;border-radius:4px;border-width:2px;border-style:solid;border-color:#A2A2A4}.page-events .events-filter[type="checkbox"]::after{position:relative;display:block;top:-20px;width:20px;height:20px;content:"";background-repeat:no-repeat;background-position:center;border-radius:4px;border-width:2px;border-style:solid;border-color:#A2A2A4}.page-events .events-filter[type="checkbox"]:checked::before{background:#111112;border:none;border-radius:0}.page-events .events-filter[type="checkbox"]:checked::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;background-color:#7919FF;border-width:2px;border-style:solid;border-color:#7919FF;border-radius:4px}.page-events .events-filter[type="checkbox"]:not(:disabled):checked:hover::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}.page-events .events-filter[type="checkbox"]:not(:disabled):hover::before{background:#111112;border:none;border-radius:0}.page-events .events-filter[type="checkbox"]:not(:disabled):hover::after{background:#111112;border:none;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}#find-us-on-platforms .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-light-blue-3.svg)}#find-us-on-platforms .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-purple-blue-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-magenta-3.svg)}#find-us-on-platforms .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-green-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(5) .card-footer{background-image:url(../img/cards/4col-orange-yellow-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(6) .card-footer{background-image:url(../img/cards/4col-blue-purple.svg)}#find-us-on-platforms .card-deck .card:nth-child(7) .card-footer{background-image:url(../img/cards/4col-yellow-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(8) .card-footer{background-image:url(../img/cards/4col-orange-2.svg)}#find-us-on-platforms .card-deck .card{margin-bottom:2.5rem}.page-faq::before{background-image:url(../img/backgrounds/faq-bg.svg)}@media (min-width: 768px){.page-faq::before{background-size:contain}}@media (min-width: 992px){.page-faq .content{max-width:704px;margin-left:auto;margin-right:auto}}.page-faq .content h6:first-of-type{color:#32E685;margin-bottom:1rem;margin-top:2.5rem;font-size:1.25rem;line-height:26px;text-align:center}.page-faq .content h6:first-of-type .hover_anchor{display:none}@media (min-width: 992px){.page-faq .content h6:first-of-type{margin-top:6.5rem}}.page-faq .content h1:first-of-type{font-size:2.625rem;line-height:1.2;margin-top:0;margin-bottom:5rem;text-align:center}.page-faq .content h1:first-of-type .hover_anchor{display:none}@media (min-width: 992px){.page-faq .content h1:first-of-type{font-size:3.875rem;margin-bottom:13rem}}.page-faq h2{margin-top:13rem;font-size:2rem;line-height:2.375rem;text-align:center;font-weight:700}.page-faq .q-wrapper,.mini-faq .q-wrapper{background:#232325;border-radius:4px;padding:2rem;padding-right:3rem;margin-bottom:3.5rem;position:relative;z-index:5;width:100%;transform:translateY(0%)}.page-faq .q-wrapper p a,.mini-faq .q-wrapper p a{text-decoration:none;font-weight:600;color:#9A52FF}.page-faq .q-wrapper p a:hover,.mini-faq .q-wrapper p a:hover{text-decoration:underline}.page-faq .q-wrapper h4,.mini-faq .q-wrapper h4{font-size:1.25rem;line-height:1.625rem;margin-top:0}.page-faq .q-wrapper h4::before,.mini-faq .q-wrapper h4::before{display:block;content:" ";margin-top:-80px;height:80px;visibility:hidden}.page-faq .q-wrapper h4>a,.mini-faq .q-wrapper h4>a{text-decoration:none}.page-faq .q-wrapper h4>a:hover,.mini-faq .q-wrapper h4>a:hover{text-decoration:underline;color:#fff}@media (max-width: 991.98px){.page-faq .q-wrapper h4,.mini-faq .q-wrapper h4{font-size:1rem;line-height:1.5rem}}.page-faq .q-wrapper h4 .chevron,.mini-faq .q-wrapper h4 .chevron{position:absolute;top:40px;right:2rem}.page-docs-index::before{background-image:url(../../img/backgrounds/docs-splash.svg);background-position-x:right}.page-docs-index .center-search .input-group-text{height:56px;padding:.75rem .75rem .75rem 1rem;line-height:2rem}.page-docs-index .center-search .ds-input{height:56px;padding:.75rem 1rem .75rem .5rem}.page-docs-index #software-and-sdks .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-green.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-light-blue.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-orange.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-yellow.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-orange-yellow.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-magenta.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-blue-green.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-light-blue-2.svg)}.page-docs-index #docs-hot-topic .longform{margin-top:2.5rem}.page-docs-index #community-heading,.page-community #community-heading{padding-top:2.5rem;padding-bottom:5rem;padding-left:1rem}@media (min-width: 992px){.page-docs-index #community-heading,.page-community #community-heading{padding-top:5rem;padding-bottom:15rem;padding-left:0}}@media (min-width: 1200px){.page-docs-index #community-heading,.page-community #community-heading{padding-bottom:25rem}}.page-docs-index #community-heading .parallax,.page-community #community-heading .parallax{position:absolute;-webkit-transition:all 0.1s ease;-moz-transition:all 0.1s ease;-ms-transition:all 0.1s ease;-o-transition:all 0.1s ease;transition:all 0.1s ease}.page-docs-index #community-heading .one,.page-community #community-heading .one{top:160px;left:0%}.page-docs-index #community-heading .two,.page-community #community-heading .two{top:439px;left:22%}.page-docs-index #community-heading .three,.page-community #community-heading .three{top:517px;left:52%}.page-docs-index #community-heading .four,.page-community #community-heading .four{top:322px;left:71%}.page-docs-index #community-heading .five,.page-community #community-heading .five{top:120px;right:0%}.page-docs-index #run-a-network-node .card-deck .card:nth-child(1) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-yellow-2.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(2) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-purple.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(3) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-magenta-2.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(4) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-light-green.svg)}.page-docs-index #run-a-network-node,.page-community #run-a-network-node{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #run-a-network-node,.page-community #run-a-network-node{padding-top:104px;padding-bottom:104px}}.page-docs-index #run-a-network-node .text-cards,.page-community #run-a-network-node .text-cards{grid-gap:40px}.page-docs-index #run-a-network-node .text-cards h6::before,.page-community #run-a-network-node .text-cards h6::before{margin-top:0;height:unset}.page-docs-index #run-a-network-node .text-cards a,.page-community #run-a-network-node .text-cards a{font-size:1.25rem;line-height:26px;color:#fff;font-weight:bold}.page-docs-index #run-a-network-node .text-cards a:hover,.page-community #run-a-network-node .text-cards a:hover{text-decoration:none;background:none !important}.page-docs-index #run-a-network-node .text-cards .btn-arrow::after,.page-community #run-a-network-node .text-cards .btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right-purple.svg);vertical-align:middle;padding-left:8px;-webkit-transition:transform 0.3s ease-out;-moz-transition:transform 0.3s ease-out;-ms-transition:transform 0.3s ease-out;-o-transition:transform 0.3s ease-out;transition:transform 0.3s ease-out}.page-docs-index #xrpl-grants,.page-community #xrpl-grants{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-grants,.page-community #xrpl-grants{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-blog,.page-community #xrpl-blog{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-blog,.page-community #xrpl-blog{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-events,.page-community #xrpl-events{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-events,.page-community #xrpl-events{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-careers,.page-community #xrpl-careers{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-careers,.page-community #xrpl-careers{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-design-assets,.page-community #xrpl-design-assets{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-design-assets,.page-community #xrpl-design-assets{padding-top:104px;padding-bottom:208px}}.page-community #platform-github{content:url("../img/logos/github.svg")}.page-community #platform-twitch{content:url("../img/logos/twitch.svg")}.page-community #platform-stack-overflow{content:url("../img/logos/stack-overflow.svg")}.page-community #platform-twitter{content:url("../img/logos/twitter.svg")}.page-community #platform-discord{content:url("../img/logos/discord.svg")}.page-community #platform-youtube{content:url("../img/logos/youtube.svg")}.page-community #platform-devto{content:url("../img/logos/devto.svg")}.page-references #refs-types .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/3col-orange-2.svg)}.page-references #refs-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/3col-green-2.svg)}.page-references #refs-types .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/3col-magenta.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-light-blue-4.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-blue-green-2.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-yellow-3.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-purple-blue.svg)}.page-dev-tools #xrp-explorer .card-footer{background-image:url("../img/cards/3-col-orange.svg")}.page-dev-tools #bithomp-explorer .card-footer{background-image:url("../img/cards/3-col-light-blue.svg")}.page-dev-tools #xrpscan .card-footer{background-image:url("../img/cards/3-col-pink.svg")}.page-dev-tools #token-list .card-footer{background-image:url("../img/cards/3-col-pink2.svg")}.page-dev-tools #websocket .card-footer{background-image:url("../img/cards/3-col-purple2.svg")}.page-dev-tools #rpc .card-footer{background-image:url("../img/cards/3-col-green.svg")}.page-dev-tools #technical-explorer .card-footer{background-image:url("../img/cards/3-col-purple-blue.svg")}.page-dev-tools #faucets .card-footer{background-image:url("../img/cards/3-col-pink2.svg")}.page-dev-tools #trasaction-sender .card-footer{background-image:url("../img/cards/3-col-light-blue2.svg")}.page-dev-tools #domain .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.page-dev-tools #xrp-ledger .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.page-dev-tools #binary-visualizer .card-footer{background-image:url("../img/cards/3-col-purple-blue.svg")}.page-dev-tools #token-metadata-lookup .card-footer{background-image:url("../img/cards/3-col-pink-purple.svg")}.page-dev-tools .nav-link{color:#A2A2A4;background-color:#111112;border-top:none;border-left:none;border-right:none;border-bottom-color:#454549}@media (max-width: 767.98px){.page-dev-tools .nav-tabs{display:flex;list-style:none;margin-left:0;padding-left:0;justify-content:space-between}.page-dev-tools .nav-item{display:inline-flex;width:auto;list-style:outside none none}.page-dev-tools .nav-link{display:inline-flex;width:auto;padding:1em 1em}}.page-dev-tools .nav-link.active{border-bottom-color:#9A52FF;color:#fff;font-weight:bold}.page-dev-tools .nav-tabs{border-bottom:1px solid #454549}.page-dev-tools .btn{padding:0.75rem}html.light .page-dev-tools .nav-link{background-color:#F5F5F7}html.light .page-dev-tools .nav-link.active{border-bottom-color:#9A52FF;color:#000;font-weight:bold}html.light .page-dev-tools .nav-link{color:#000}html.light .page-dev-tools #trasaction-sender .card-footer{background-image:url("../img/cards/3-col-light-blue-2.svg")}.rpc-tool #result{display:none}.rpc-tool #log{font-weight:700}.rpc-tool .content .json li{margin-top:0}.rpc-tool .json .name{color:#fff}.rpc-tool .json ul{margin:0;display:none}.rpc-tool .json li{padding:0;list-style-type:none}.rpc-tool .json .type-string .val{color:#28B86A}.rpc-tool .json .type-number .val{color:#19A3FF}.rpc-tool .json a.toggle:hover{text-decoration:none}.rpc-tool .json>a.toggle{display:none}.rpc-tool .json a.toggle:after{content:" +\0000a0";cursor:pointer}.rpc-tool .json>ul,.rpc-tool .json .expanded>ul{display:block}.rpc-tool .json .ellipsis{color:#838386}.rpc-tool .json>.ellipsis,.rpc-tool .json .expanded>.ellipsis{display:none}.rpc-tool .json .expanded>a.toggle:after{content:" \2212\0000a0"}.rpc-tool .json .indentafter{display:none}.rpc-tool .json .expanded>.indentafter{display:inline}.rpc-tool .tools{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:0.8em;margin:0 0 10px}.rpc-tool .tools>li>a{cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:6px 9px}.dev-blog .labels-wrap{display:inline-block}.dev-blog a.badge-primary{text-decoration:none}.dev-blog a.badge-primary:hover{text-decoration:none}#feedback-content .docked-widget{border:none !important;background-color:transparent !important;position:static !important;box-shadow:none !important;width:auto !important}#feedback-content .widget-form-wrapper{position:static !important;box-shadow:none !important;display:block;background-color:#232325 !important;border-width:0 !important;padding:24px !important;border-radius:8px !important}#feedback-content .widget-form-wrapper div{background-color:#232325 !important}#feedback-content .widget-form-wrapper textarea{background-color:#fff !important;opacity:1 !important;border:none !important;border-radius:4px !important;margin:0 !important;width:100% !important;color:#000 !important}#feedback-content .widget-form-wrapper .widget-header-title{background:none !important;flex-grow:0 !important;padding-right:1rem !important;height:auto !important;padding:0 !important;margin-bottom:10px !important}#feedback-content .widget-form-wrapper .widget-header-footer{background:none !important}#feedback-content .widget-form-wrapper .widget-form-footer{padding-right:0 !important}#feedback-content .widget-form-wrapper .submit{background-color:#7919FF !important;font-weight:bold !important;color:#fff !important;border:none !important;border-color:transparent !important;border-radius:4px !important;margin:0 !important;margin-top:8px !important}#feedback-content .widget-form-wrapper .submit:hover{background:#5F00E5 !important}#feedback-content .widget-form-wrapper .submit.disabled,#feedback-content .widget-form-wrapper .submit[disabled="disabled"]{background-color:#4A00B2 !important}#feedback-content .widget-form-wrapper .submit.disabled:hover,#feedback-content .widget-form-wrapper .submit[disabled="disabled"]:hover{background-color:#4A00B2 !important}#feedback-content .widget-form-wrapper .cancel{margin:0 !important;margin-top:8px !important;color:#B480FF !important;font-weight:600 !important}#feedback-content #closeFeedback{display:none}#feedback-content .widget-helpful .widget-header{background-color:#232325 !important;border-radius:8px !important}#feedback-content .widget-helpful .widget-header-title{color:#fff !important}.video-image{transition:all 0.35s ease-out;cursor:pointer}.video-image:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}#video-overlay{position:fixed;top:0;left:0;z-index:1190;height:100%;width:100%;background:#ffffff;opacity:0.6;display:none}#video{display:none;position:fixed;top:10%;left:15%;width:70%;z-index:1200}#video-container{position:relative;top:50%;left:50%;-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);max-width:982px;padding:0 20px}#videoWrapper{position:absolute;top:0;left:0;height:calc(90vh - 100px);width:80vw}#videoWrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}#video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.video-external-link{color:#9A52FF;font-weight:600}.video-external-link::after{content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:24px;padding:9px 4px 0 8px;width:2rem;background-position:left 8px bottom 0px;transition:background-position 100ms ease-in-out}.video-external-link.video-external-link:hover::after{background-position:left 12px bottom 8px}.video-title{line-height:1.2}@media (min-width: 768px){.video-title{font-size:1rem}}.toml-checker #result{display:none}.toml-checker #verify-domain-result{display:none}.tutorial-content #beginner-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #servers-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #servers-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #servers-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #servers-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #servers-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #servers-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #servers-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-card-grid{grid-gap:16px !important;row-gap:0 !important}.tutorial-card-grid.card-grid.card-grid-3xN{grid-template-columns:1fr;grid-auto-rows:auto}@media (min-width: 1200px){.tutorial-card-grid.card-grid.card-grid-3xN{grid-template-columns:1fr 1fr 1fr}}.tutorial-card-grid.card-grid .card{margin-bottom:2.5rem;background-position:bottom;background-repeat:no-repeat;background-size:contain;padding:0;min-height:0}.tutorial-card-grid.card-grid .card .card-body{padding:32px}.tutorial-card-grid.card-grid .card .card-title{margin-bottom:16px;margin-top:0}.tutorial-card-grid.card-grid .card .card-title.external-link::after{background-size:0.9rem;vertical-align:middle;margin-left:12px;margin-bottom:12px;margin-right:10px;width:1.5rem}.tutorial-card-grid.card-grid .card .card-title.nav-link{padding:0}.tutorial-card-grid.card-grid .card .card-footer{font-size:0;padding:1rem;background-position:bottom;background-repeat:no-repeat;background-size:cover;border-top:0}.tutorial-card-grid.card-grid a{text-decoration:none}.tutorial-card-grid.card-grid code{color:#2DCF78;background-color:#0A2E1B;border-radius:4px;padding-left:4px;padding-right:4px}.tutorial-card-grid.card-grid .card-icon-container{width:50px;height:50px;background:#454549;display:flex;justify-content:center;align-items:center;border-radius:50%;margin-bottom:12px}.tutorial-card-grid.card-grid .card-icon-container img{width:70%;height:70%}.sdk-img{align-self:center}.light .sdk-img{content:url(../../img/graphics/sdk-white.png)}.light .ref-book-illustration{content:url(../../img/graphics/ref-book-light.png)}.light .tutorial-illustration{content:url(../../img/graphics/tutorials-illustration-light.png)}.light .concepts-doc-illustration{content:url(../../img/graphics/concepts-docs-light.png)}.light .use-cases .wallet-illustration{content:url(../../img/graphics/wallet-light.svg)}.light .use-cases .token-illustration{content:url(../../img/graphics/tokens-light.png)}.light .use-cases .connections-illustration{content:url(../../img/graphics/nodes-light.svg)}.light .quickstart-image{content:url(../../img/graphics/getting-started-pages-light.png)}.light .dev-tools-img{content:url(../../img/graphics/dev-tools-light.svg)}.light .dev-tools-link:hover p{color:#000}.dark .sdk-img{content:url(../../img/graphics/sdk-black.png)}.dark .ref-book-illustration{content:url(../../img/graphics/ref-book.png)}.dark .tutorial-illustration{content:url(../../img/graphics/tutorials-illustration.png)}.dark .concepts-doc-illustration{content:url(../../img/graphics/concepts-doc.png)}.dark .use-cases .wallet-illustration{content:url(../../img/graphics/wallet-dark.png)}.dark .use-cases .token-illustration{content:url(../../img/graphics/tokens-dark.png)}.dark .use-cases .connections-illustration{content:url(../../img/graphics/nodes-dark.png)}.dark .quickstart-image{content:url(../../img/graphics/getting-started-pages-dark.svg)}.dark .dev-tools-img{content:url(../../img/graphics/dev-tools-dark.png)}.dark .dev-tools-link:hover p{color:#fff}.dark .flat-card-grid .nav-link:hover{color:#E0E0E1}.get-started-img,.flat-card{max-width:100%;max-height:100%}.faded-text{font-family:'Work Sans';font-style:normal;font-weight:400;font-size:15.5667px;line-height:23px}.page-docs-index section{padding-top:64px;padding-bottom:64px}.page-docs-index .dev-tools-link h6::before{margin-top:-20px;height:20px}.page-docs-index .dev-tools-link h6:hover{text-decoration:underline;text-decoration-color:#9A52FF;background:none !important}.page-docs-index .dev-tools-link:hover p{text-decoration:none !important;background:none !important;display:inline-block}.page-docs-index .dev-tools-link a:hover{color:#9A52FF;text-decoration:none !important}.page-docs-index .dev-tools-link .btn-arrow::after{content:url(../img/icons/arrow-right-purple.svg);width:1.5rem;height:1.5rem}.page-docs-index .langs>a{display:block}.page-docs-index .langs h5:hover{text-decoration:underline;text-decoration-color:#9A52FF;background:none !important}.page-docs-index .langs a:hover{text-decoration:none !important}.page-docs-index .langs .btn-arrow::after{content:url(../img/icons/arrow-right-purple.svg);vertical-align:baseline;width:1.5rem;height:1.5rem}.page-docs-index .langs h5{margin-block-start:0 !important}.page-docs-index .langs h5::before{margin-top:0;height:0}.page-docs-index h1{font-size:3.875rem}.page-docs-index .arrow-purple::after{content:url(../img/icons/arrow-right-purple.svg)}.page-docs-index .documentation-index:hover,.page-docs-index .documentation-index::after{color:#9A52FF;text-decoration:none !important;background:none !important}@media (max-width: 765px){.page-docs-index h1{font-size:3rem}.page-docs-index .flat-card-grid{grid-gap:24px}.page-docs-index .flat-card-grid .flat-card{padding:32px 12px}.page-docs-index::before{display:none}}#langs-cards{grid-gap:40px}@media (max-width: 991.98px){.page-docs-index .langs-cards{grid-template-columns:1fr 1fr;grid-auto-rows:auto}}.dev-tools-img{max-width:100%;max-height:100%;margin:auto}.page-docs .h4::before{margin-top:0;height:0}.page-docs .row{margin-right:0;margin-left:0}.page-docs .video-grid{grid-gap:35px}.page-docs .title-space{margin-bottom:16px}.page-docs .circled-logo{margin-left:0.1rem}.flat-card-grid{grid-gap:15px;max-width:100%;min-height:384px}.flat-card-grid .flat-card{padding:32px 50px;height:100%;width:100%;box-shadow:none}.flat-card-grid .flat-card-padding{margin-bottom:75px}.flat-card-grid img{width:auto;height:115px;margin-left:auto;margin-right:auto}.flat-card-grid .nav-link{border:none !important}.flat-card-grid .nav-link:hover{text-decoration:underline;text-decoration-color:#9A52FF}.flat-card-grid .nav-link::after{content:none !important}@media (max-width: 991.98px){.flat-card-grid .flat-card-padding{margin-bottom:0}.flat-card-grid .nav-link::after{content:' ' !important}.flat-card-grid .flat-card .btn{display:none}}.float-up-on-hover{transition:all 0.35s ease-out;cursor:pointer}.float-up-on-hover:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}.float-up-on-hover .video-image:hover{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}@media (min-width: 992px){.align-button-on-bottom .btn-primary{position:absolute;bottom:0}}.center-image{display:flex;justify-content:center}.quickstart-card .quickstart-image{margin-left:-20px;margin-right:-20px;margin-bottom:-20px}@media (min-width: 992px){.quickstart-card{margin-left:-32px;margin-right:-32px;margin-bottom:-32px;width:calc(100% + 64px)}}.explore-links .card-grid{grid-gap:40px}.full-documentation-link{margin-top:-35px}html.light .content p code,html.light .content table code,html.light .content li>code{background-color:#E0E0E1;color:#111112}html.light body{background-color:#F5F5F7;color:#000}html.light #topnav-theme .custom-theme-toggle .custom-control-label::before{background-color:transparent;background-position:bottom right;transform:rotate(-15deg)}html.light h1:not(.chip),html.light h2:not(.chip),html.light h3:not(.chip),html.light h4:not(.chip),html.light h5:not(.chip),html.light h6:not(.chip),html.light .h1:not(.chip),html.light .h2:not(.chip),html.light .h3:not(.chip),html.light .h4:not(.chip),html.light .h5:not(.chip),html.light .h6:not(.chip){color:#000}html.light h1.green-500,html.light h2.green-500,html.light h3.green-500,html.light h4.green-500,html.light h5.green-500,html.light h6.green-500,html.light .h1.green-500,html.light .h2.green-500,html.light .h3.green-500,html.light .h4.green-500,html.light .h5.green-500,html.light .h6.green-500{color:#28B86A;text-shadow:white 0 0 2px, white -1px -1px 2px, white 1px 1px 2px}html.light .bg-grey-800{background-color:#FCFCFD}html.light .grey-400{color:#454549}html.light .text-muted{color:#232325 !important}html.light .longform{color:#232325}html.light .numbers{color:#000}html.light .stat-highlight,html.light .eyebrow{color:#111112}html.light .invertible-img{filter:invert(100%)}html.light .arrow-link::after{content:url("../img/lightmode/icon-long-arrow.svg")}html.light .search .input-group-text,html.light .input-group .input-group-text,html.light .form-group .input-group-text{background-color:#E0E0E1;color:#232325}html.light .search label .input-group-text,html.light .search .form-control:not(.btn),html.light .input-group label .input-group-text,html.light .input-group .form-control:not(.btn),html.light .form-group label .input-group-text,html.light .form-group .form-control:not(.btn){color:#000;background-color:#E0E0E1;border-color:#E0E0E1}html.light .search .ds-input,html.light .input-group .ds-input,html.light .form-group .ds-input{color:#000;background-color:#E0E0E1;border-color:#E0E0E1}html.light .search .ds-input:focus,html.light .input-group .ds-input:focus,html.light .form-group .ds-input:focus{border-color:#9A52FF}html.light .list-group-item{border-color:#232325;background-color:#F5F5F7}html.light .list-group-item.disabled{color:#A2A2A4}html.light .progress{background-color:#E0E0E1}html.light .xrp-ledger-dev-portal .DocSearch-Modal{background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Prefill{color:#7919FF}html.light .xrp-ledger-dev-portal .DocSearch-Button{background:var(--docsearch-searchbox-background)}html.light .xrp-ledger-dev-portal .DocSearch-Button:hover{box-shadow:inset 0 0 0 2px #7919FF;border-radius:40px;background:var(--docsearch-searchbox-background)}html.light .xrp-ledger-dev-portal .DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--docsearch-text-color)}html.light .xrp-ledger-dev-portal .DocSearch-Search-Icon{color:var(--docsearch-text-color) !important}html.light .xrp-ledger-dev-portal .DocSearch-Input{color:#111112}html.light .xrp-ledger-dev-portal .DocSearch-Hit-Select-Icon{color:#111112}html.light .xrp-ledger-dev-portal .DocSearch-Form{box-shadow:inset 0 0 0 2px #7919FF;background-color:var(--docsearch-searchbox-focus-background)}html.light .xrp-ledger-dev-portal .DocSearch-Hit-source{color:#7919FF;background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hits mark{color:#7919FF}html.light .xrp-ledger-dev-portal .DocSearch-Hit-Container{background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hit a{background-color:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hit-content-wrapper .DocSearch-Hit-title{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit-content-wrapper .DocSearch-Hit-path{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Logo svg .cls-1,html.light .xrp-ledger-dev-portal .DocSearch-Logo svg .cls-2{fill:var(--docsearch-logo-color)}html.light .xrp-ledger-dev-portal .DocSearch-Hit-title,html.light .xrp-ledger-dev-portal .DocSearch-Hit-path,html.light .xrp-ledger-dev-portal .DocSearch-Label,html.light .xrp-ledger-dev-portal .DocSearch-Help{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a{background:#F5F5F7}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-Container{background-color:#F5F5F7}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-content-wrapper .DocSearch-Hit-title{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-content-wrapper .DocSearch-Hit-path{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-icon svg{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-action .DocSearch-Hit-action-button svg{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a mark{color:#7919FF !important}html.light .xrp-ledger-dev-portal .DocSearch-Footer{background:var(--docsearch-footer-background)}html.light .xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu [class^="ds-dataset-"]{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu::before{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header{color:#000;border-bottom-color:#7919FF}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{color:#000}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--title{color:#000}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text{color:#232325}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#000;background-color:#C1C1C2}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{background-color:#C1C1C2}html.light a,html.light nav a{color:#000}html.light a.btn-primary,html.light nav a.btn-primary{color:#fff}html.light a.btn-primary:hover,html.light nav a.btn-primary:hover{color:#fff}html.light a:hover,html.light a:active,html.light a.active,html.light nav a:hover,html.light nav a:active,html.light nav a.active{color:#7919FF}html.light a:not(.btn):focus,html.light nav a:not(.btn):focus{background-color:transparent}html.light a.card:hover,html.light:active,html.light.active{color:#000}html.light .landing-table tbody td{color:#232325}html.light .btn-outline-secondary,html.light .content a.button,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary{color:#111112;border-color:#111112}html.light .btn-outline-secondary:not(:disabled):not(.disabled):hover,html.light .btn-outline-secondary:not(:disabled):not(.disabled):active,html.light .content a.button:not(:disabled):not(.disabled):hover,html.light .content a.button:not(:disabled):not(.disabled):active,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary:not(:disabled):not(.disabled):hover,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary:not(:disabled):not(.disabled):active{color:#9A52FF;border-color:#9A52FF;background-color:transparent}html.light .breadcrumb{background:#F5F5F7}html.light .breadcrumb-item a{color:#454549}html.light .breadcrumb-item a:hover{color:#9A52FF}html.light .top-nav{background:#F5F5F7}html.light .top-nav #topnav-pages .nav-link{color:#000}html.light .top-nav .navbar-brand .logo{content:url(../img/XRPLedger_DevPortal-black.svg);height:40px}html.light .top-nav #top-nav-hero-docs{content:url(../img/icons/lightmode/docs.svg)}html.light .top-nav #top-nav-hero-contribute{content:url(../img/icons/lightmode/contribute.svg)}html.light .top-nav .dropdown-menu{background-color:#F5F5F7;border-color:#F5F5F7;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .top-nav .dropdown-menu a:hover,html.light .top-nav .dropdown-menu a.active{color:#7919FF}html.light .top-nav .dropdown-menu .dropdown-item.dropdown-hero>img{background-color:#FCFCFD}html.light .top-nav .dropdown-menu .dropdown-item.dropdown-hero p{color:#343437}html.light .top-nav .dropdown-menu .dropdown-item.active{color:#7919FF}html.light .top-nav .dropdown-menu h5{color:#454549}html.light .top-nav .dropdown-menu .col-for-popular-pages,html.light .top-nav .dropdown-menu .col-for-人気ページ,html.light .top-nav .dropdown-menu .col-for-questions,html.light .top-nav .dropdown-menu .col-for-質問{background-color:#E0E0E1}@media (max-width: 991.98px){html.light .top-nav .navbar-toggler .navbar-toggler-icon::after,html.light .top-nav .navbar-toggler .navbar-toggler-icon::before,html.light .top-nav .navbar-toggler .navbar-toggler-icon div{background-color:#111112}html.light .top-nav .navbar-nav .nav-link,html.light .top-nav .navbar-collapse>.nav-item{background:#E0E0E1}}html.light aside .sidenav_cat_title{color:#000}html.light .page-toc .level-1 a,html.light .command-list .separator{color:#000}html.light aside a:hover,html.light aside .sidenav_cat_title:hover,html.light aside a.active,html.light aside a.active:hover,html.light aside .active>a,html.light aside .active>a:hover{color:#7919FF}html.light .dactyl-tree-nav nav{border-left:1px solid #000}html.light .dactyl-tree-nav nav .nav-link:hover,html.light .dactyl-tree-nav nav .nav-link:active{border-left-color:#7919FF}html.light .dactyl-tree-nav nav .active>.nav-link{border-left-color:#7919FF}html.light .page-toc,html.light .command-list{border-left:1px solid #000}html.light .page-toc .level-3,html.light .command-list .level-3{border-left:1px solid #000}html.light .page-toc li a:hover,html.light .page-toc li a .active,html.light .command-list li a:hover,html.light .command-list li a .active{border-left-color:#7919FF}html.light .footer-brand .logo{filter:invert(100%)}html.light .copyright-license{text-shadow:white 0px 0px 2px, white 1px 1px 2px, white 2px 2px 3px, white 2px 2px 4px, white 2px 2px 5px, white 2px 2px 6px, white -1px -1px 2px, white -2px -2px 3px, white -2px -2px 4px}html.light a.osano-cm-link{color:#ffffff}html.light .card,html.light .cta-card{color:#000;background-color:#FCFCFD;box-shadow:0px 5px 20px 0px #C1C1C2}html.light #code-samples-deck .card{box-shadow:0px 5px 20px 0px #C1C1C2}html.light #code-samples-deck .card-header{border-bottom:none;background-color:#FCFCFD}html.light #code-samples-deck .card-footer{background-color:#FCFCFD}html.light .page-faq.landing-builtin-bg::before,html.light .mini-faq.landing-builtin-bg::before{opacity:0.6}html.light .page-faq .q-wrapper,html.light .mini-faq .q-wrapper{background-color:#FCFCFD;color:#000;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .page-faq .q-wrapper>h4 a.expander:hover,html.light .mini-faq .q-wrapper>h4 a.expander:hover{color:#000}html.light .page-community #platform-stack-overflow{content:url("../img/logos/lightmode/stack-overflow.svg")}html.light .page-community #platform-discord{content:url("../img/logos/lightmode/discord.svg")}html.light .status.not_enabled{color:#AEB200}html.light .pg-category{color:#454549}html.light .landing .nav .nav-link{color:#232325;border-bottom-color:#C1C1C2}html.light .landing .circled-logo{background-color:#E0E0E1}html.light .landing .circled-logo img[src="assets/img/logos/globe.svg"]{filter:invert(100%)}html.light .landing p a,html.light .landing .longform a{color:#7919FF}html.light .devportal-callout.caution,html.light .devportal-callout.注意{border-color:#AEB200}html.light .devportal-callout.caution>strong:first-child::before,html.light .devportal-callout.注意>strong:first-child::before{color:#AEB200}html.light .devportal-callout.tip,html.light .devportal-callout.ヒント{border-color:#2DCF78}html.light .devportal-callout.tip>strong:first-child::before,html.light .devportal-callout.ヒント>strong:first-child::before{color:#2DCF78}html.light code{color:#000}html.light pre code{color:#FCFCFD}html.light .multicode a{color:#000}html.light .multicode a.current{color:#fff}html.light .multicode a:hover{text-decoration:none;background-color:#E0E0E1;color:#fff}html.light .multicode a:focus{background-color:#232325}html.light .codehilite .btn-outline-secondary{background-color:#232325;color:#F5F5F7;border-color:#F5F5F7}html.light .interactive-block .breadcrumb-item.done a::after{color:#145C35}html.light .modal-content{background-color:#FCFCFD}html.light .rpc-tool pre .toggle{color:#fff}html.light .rpc-tool pre .toggle:hover{color:#B480FF}html.light .page-home #home-hero-graphic{content:url("../img/lightmode/home-hero.svg")}html.light .page-home #benefits-list #public{content:url("../img/icons/lightmode/public.svg")}html.light .page-home #benefits-list #streamlined{content:url("../img/icons/lightmode/streamlined.svg")}html.light .page-home #benefits-list #performance{content:url("../img/icons/lightmode/performance.svg")}html.light .page-home #benefits-list #low-cost{content:url("../img/icons/lightmode/low-cost.svg")}html.light .page-home #benefits-list #community{content:url("../img/icons/lightmode/community.svg")}html.light .page-home #benefits-list #reliability{content:url("../img/icons/lightmode/reliability.svg")}html.light #validator-graphic{content:url("../img/lightmode/validators.svg")}html.light #wallets #wallet-xumm{content:url("../img/wallets/lightmode/xumm.svg")}html.light #wallets #wallet-bitfrost{content:url("../img/wallets/lightmode/bitfrost.png")}html.light #wallets #wallet-towo{content:url("../img/wallets/lightmode/towo.svg")}html.light #wallets #wallet-keystone{content:url("../img/wallets/lightmode/keystone.svg")}html.light #wallets #wallet-dcent{content:url("../img/wallets/lightmode/dcent.svg")}html.light #top-exchanges #exch-bitstamp{content:url("../img/exchanges/lightmode/bitstamp.svg")}html.light #top-exchanges #exch-cex-io{content:url("../img/exchanges/lightmode/cex-io.svg")}html.light #top-exchanges #exch-liquid{content:url("../img/exchanges/lightmode/liquid.svg")}html.light #top-exchanges #exch-bitfinex{content:url("../img/exchanges/lightmode/bitfinex.svg")}html.light #top-exchanges #exch-bittrex{content:url("../img/exchanges/lightmode/bittrex.png")}html.light #top-exchanges #exch-currency-com{content:url("../img/exchanges/lightmode/currency-com.png")}html.light #top-exchanges #exch-ftx{content:url("../img/exchanges/lightmode/ftx.png")}html.light #top-exchanges #exch-lmax{content:url("../img/exchanges/lightmode/lmax.png")}html.light .timeline-dot{background-color:#F5F5F7}html.light .page-uses .card-body{background:#fff;color:#343437}html.light .page-uses .modal-footer,html.light .page-uses .modal-header{background-color:#FCFCFD}html.light .page-uses #infrastructure{content:url("../img/icons/usecases/lightmode/ic_infrastructure.png")}html.light .page-uses #developer_tooling{content:url("../img/icons/usecases/lightmode/ic_developer_tooling.png")}html.light .page-uses #interoperability{content:url("../img/icons/usecases/lightmode/ic_interoperability.png")}html.light .page-uses #wallet{content:url("../img/icons/usecases/lightmode/ic_wallet.png")}html.light .page-uses #nfts{content:url("../img/icons/usecases/lightmode/ic_nfts.png")}html.light .page-uses #exchanges{content:url("../img/icons/usecases/lightmode/ic_exchanges.png")}html.light .page-uses #gaming{content:url("../img/icons/usecases/lightmode/ic_gaming.png")}html.light .page-uses #security{content:url("../img/icons/usecases/lightmode/ic_security.png")}html.light .page-uses #payments{content:url("../img/icons/usecases/lightmode/ic_payments.png")}html.light .page-uses #web_monetization{content:url("../img/icons/usecases/lightmode/ic_web_monetization.png")}html.light .page-uses #sustainability{content:url("../img/icons/usecases/lightmode/ic_sustainability.png")}html.light .page-uses #cbdc{content:url("../img/icons/usecases/lightmode/ic_cbdc.png")}html.light .page-uses #custody{content:url("../img/icons/usecases/lightmode/ic_custody.png")}html.light .page-uses #defi{content:url("../img/icons/usecases/lightmode/ic_defi.png")}html.light .page-uses .category-header{color:#343437}html.light .page-uses .category_count{background:#D2B2FF;color:#350080}html.light .page-uses #use_case_companies_list #bitgo .biz-logo{max-height:40px;content:url("../img/uses/lightmode/bitgo.svg")}html.light .page-uses #use_case_companies_list #sologenic-nft .biz-logo{max-height:40px;content:url("../img/uses/lightmode/sologenic-nft.svg")}html.light .page-uses #use_case_companies_list #carbonland-trust .biz-logo{max-height:40px;content:url("../img/uses/lightmode/carbonland-trust.svg")}html.light .page-uses #use_case_companies_list #x-tokenize .biz-logo{max-height:40px;content:url("../img/uses/lightmode/x-tokenize.svg")}html.light .page-uses #use_case_companies_list #casino-coin .biz-logo{max-height:40px;content:url("../img/uses/lightmode/casino-coin.svg")}html.light .page-uses #use_case_companies_list #xrp-cafe .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrp-cafe.svg")}html.light .page-uses #use_case_companies_list #coil .biz-logo{max-height:40px;content:url("../img/uses/lightmode/coil.svg")}html.light .page-uses #use_case_companies_list #xrp-toolkit .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrp-toolkit.svg")}html.light .page-uses #use_case_companies_list #cryptum .biz-logo{max-height:40px;content:url("../img/uses/lightmode/cryptum.svg")}html.light .page-uses #use_case_companies_list #xrpl-org-ledger-explorer .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpl-org-ledger-explorer.svg")}html.light .page-uses #use_case_companies_list #evernode .biz-logo{max-height:40px;content:url("../img/uses/lightmode/evernode.svg")}html.light .page-uses #use_case_companies_list #xrpl-rosetta .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpl-rosetta.svg")}html.light .page-uses #use_case_companies_list #ripples-cbdc-platform .biz-logo{max-height:40px;content:url("../img/uses/lightmode/ripples-cbdc-platform.svg")}html.light .page-uses #use_case_companies_list #xrpscan .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpscan.svg")}html.light .page-uses #use_case_companies_list #ripples-on-demand-liquidity .biz-logo{max-height:40px;content:url("../img/uses/lightmode/ripples-on-demand-liquidity.svg")}html.light .page-uses #use_case_companies_list #xumm-wallet .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xumm-wallet.svg")}html.light .page-uses #use_case_companies_list #sologenic-dex .biz-logo{max-height:40px;content:url("../img/uses/lightmode/sologenic-dex.svg")}html.light .page-uses #bitpay .biz-logo,html.light .page-uses #forte .biz-logo,html.light .page-uses #xrplorer .biz-logo,html.light .page-uses #gatehub .biz-logo{filter:invert(100%)}html.light .landing-bg{opacity:0.4}@media (min-width: 768px){html.light .landing-bg{opacity:1}}html.light .landing-builtin-bg::before{opacity:0.4}@media (min-width: 768px){html.light .landing-builtin-bg::before{opacity:1}}html.light #feedback-content .widget-form-wrapper{background-color:#fff !important}html.light #feedback-content .widget-form-wrapper div{background-color:#fff !important}html.light #feedback-content .widget-form-wrapper textarea{background-color:#F5F5F7 !important}html.light #feedback-content .widget-form-wrapper .widget-header-title{color:#111112 !important}html.light #feedback-content .widget-form-wrapper .cancel{color:#7919FF !important}html.light #feedback-content .widget-helpful .widget-header{background-color:#fff !important}html.light #feedback-content .widget-helpful .widget-header-title{color:#111112 !important}html.light #feedback-content .widget-helpful .widget-header-icon{filter:invert(100%)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/lightmode/4col-green.svg)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue.svg)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-yellow.svg)}html.light .page-docs-index #doc-types .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-2.svg)}html.light .page-docs-index #run-a-network-node .card-deck .card:nth-child(4) .card-footer,html.light .page-community #run-a-network-node .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-light-green.svg)}html.light .page-docs-index #run-a-network-node .text-cards a,html.light .page-community #run-a-network-node .text-cards a{color:#000}html.light .page-docs-index #xrpl-blog .blog-graphic,html.light .page-community #xrpl-blog .blog-graphic{content:url(../img/community/lightmode/community-blog@2x.png)}html.light .page-docs-index #xrpl-events .text-light,html.light .page-community #xrpl-events .text-light{color:#000 !important}html.light .page-docs-index #xrplGrantsDark,html.light .page-docs-index #xrplGrantsDark-small,html.light .page-docs-index #careersDark,html.light .page-docs-index #careersDark-small,html.light .page-community #xrplGrantsDark,html.light .page-community #xrplGrantsDark-small,html.light .page-community #careersDark,html.light .page-community #careersDark-small{filter:invert(100%) brightness(0.8)}html.light #find-us-on-platforms .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-3.svg)}html.light .page-references #refs-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/3col-green-2.svg)}html.light .page-references #xrpl-protocol .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-4.svg)}html.light ::-webkit-input-placeholder{color:#454549}html.light :-ms-input-placeholder{color:#454549}html.light ::-moz-placeholder{color:#454549;opacity:1}html.light :-moz-placeholder{color:#454549;opacity:1}html.light .page-events label{color:#111112}html.light .page-events .event-card{color:#000;background-color:#FCFCFD;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .page-events a.event-card:hover{color:#000}html.light .page-events .event-hero{color:#111112}html.light .page-events .event-save-date{color:#111112}html.light .page-events .event-small-gray{color:#454549}html.light .page-events #event-hero-image{height:100%;min-height:209px;background:url(../img/events/event-hero1-light@2x.png);background-size:contain;background-repeat:no-repeat;background-position:center}html.light .page-events .icon-date::before{background:url(../img/events/event-date-light.svg)}html.light .page-events .icon-location::before{background:url(../img/events/event-location-light.svg)}html.light .page-events .events-filter[type="checkbox"]::before{background-color:#F5F5F7}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):checked:hover::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;background-color:#5F00E5;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):hover::before{background-color:#F5F5F7}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):hover::after{background-color:#F5F5F7}html.light .page-ambassadors #benefits-list #benefits-01{content:url("../img/ambassadors/lightmode/benefits-01.svg")}html.light .page-ambassadors #benefits-list #benefits-02{content:url("../img/ambassadors/lightmode/benefits-02.svg")}html.light .page-ambassadors #benefits-list #benefits-03{content:url("../img/ambassadors/lightmode/benefits-03.svg")}html.light .page-ambassadors #benefits-list #benefits-04{content:url("../img/ambassadors/lightmode/benefits-04.svg")}html.light .page-ambassadors #benefits-list #benefits-05{content:url("../img/ambassadors/lightmode/benefits-05.svg")}html.light .page-ambassadors #benefits-list #benefits-06{content:url("../img/ambassadors/lightmode/benefits-06.svg")}html.light .page-ambassadors #eligibility-list #eligibility-01{content:url("../img/ambassadors/lightmode/eligibility-01.svg")}html.light .page-ambassadors #eligibility-list #eligibility-02{content:url("../img/ambassadors/lightmode/eligibility-02.svg")}html.light .page-ambassadors #eligibility-list #eligibility-03{content:url("../img/ambassadors/lightmode/eligibility-03.svg")}html.light .page-ambassadors #eligibility-list #eligibility-04{content:url("../img/ambassadors/lightmode/eligibility-04.svg")}html.light .page-ambassadors #eligibility-list #eligibility-05{content:url("../img/ambassadors/lightmode/eligibility-05.svg")}html.light .page-funding .funding-list #funding-01{content:url("../img/funding/lightmode/funding-01.svg")}html.light .page-funding .funding-list #funding-02{content:url("../img/funding/lightmode/funding-02.svg")}html.light .page-funding .funding-list #funding-03{content:url("../img/funding/lightmode/funding-03.svg")}html.light .page-funding .funding-list #funding-04{content:url("../img/funding/lightmode/funding-04.svg")}html.light .page-funding #xrplGrantsDark{filter:invert(100%) brightness(0.8)}html.light .page-impact .connect-list #connect-01{content:url("../img/impact/lightmode/connect-01.svg")}html.light .page-impact .connect-list #connect-02{content:url("../img/impact/lightmode/connect-02.svg")}html.light .page-impact .connect-list #connect-03{content:url("../img/impact/lightmode/connect-03.svg")}html.light .page-impact .connect-list #connect-04{content:url("../img/impact/lightmode/connect-04.svg")}html.light .page-impact #map-light{display:block}html.light .page-impact #map-dark{display:none}html.light .tutorial-card-grid code{background-color:#D6FAE7}html.light .tutorial-card-grid .card-icon-container{background:#C1C1C2}html.light .footer-nav .nav-item{text-shadow:#F5F5F7 0px 0px 2px, #F5F5F7 1px 1px 2px, #F5F5F7 2px 2px 3px, #F5F5F7 2px 2px 4px, #F5F5F7 2px 2px 5px, #F5F5F7 2px 2px 6px, #F5F5F7 -1px -1px 2px, #F5F5F7 -2px -2px 3px, #F5F5F7 -2px -2px 4px} + */:root{--blue: #19A3FF;--indigo: #6610f2;--purple: #9A52FF;--pink: #FF198B;--red: #dc3545;--orange: #FF6719;--yellow: #FAFF19;--green: #32E685;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #454549;--gray-dark: #232325;--primary: #9A52FF;--secondary: #E0E0E1;--success: #32E685;--info: #19A3FF;--warning: #FAFF19;--danger: #FF198B;--light: #fff;--dark: #111112;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-family-monospace: "Space Mono", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#E0E0E1;text-align:left;background-color:#111112}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#fff;text-decoration:none;background-color:transparent}a:hover{color:#9A52FF;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:"Space Mono",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#E0E0E1;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2;color:#fff}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:.875em;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:.875em;color:#454549}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#111112;border:1px solid #C1C1C2;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.075);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#454549}code{font-size:87.5%;color:#E0E0E1;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#111112;border-radius:4px;box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;font-size:87.5%;color:#111112}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container,.container-sm{max-width:540px}}@media (min-width: 768px){.container,.container-sm,.container-md{max-width:720px}}@media (min-width: 992px){.container,.container-sm,.container-md,.container-lg{max-width:960px}}@media (min-width: 1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#E0E0E1}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #C1C1C2}.table thead th{vertical-align:bottom;border-bottom:2px solid #C1C1C2}.table tbody+tbody{border-top:2px solid #C1C1C2}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #C1C1C2}.table-bordered th,.table-bordered td{border:1px solid #C1C1C2}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{color:#E0E0E1;background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#e3cfff}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#caa5ff}.table-hover .table-primary:hover{background-color:#d4b6ff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#d4b6ff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f6f6f7}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#efefef}.table-hover .table-secondary:hover{background-color:#e9e9eb}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e9e9eb}.table-success,.table-success>th,.table-success>td{background-color:#c6f8dd}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#94f2c0}.table-hover .table-success:hover{background-color:#aff5cf}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aff5cf}.table-info,.table-info>th,.table-info>td{background-color:#bfe5ff}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#87cfff}.table-hover .table-info:hover{background-color:#a6dbff}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#a6dbff}.table-warning,.table-warning>th,.table-warning>td{background-color:#feffbf}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#fcff87}.table-hover .table-warning:hover{background-color:#feffa6}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#feffa6}.table-danger,.table-danger>th,.table-danger>td{background-color:#ffbfdf}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#ff87c3}.table-hover .table-danger:hover{background-color:#ffa6d2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ffa6d2}.table-light,.table-light>th,.table-light>td{background-color:#fff}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fff}.table-hover .table-light:hover{background-color:#f2f2f2}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f2f2f2}.table-dark,.table-dark>th,.table-dark>td{background-color:#bcbcbd}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#838384}.table-hover .table-dark:hover{background-color:#afafb0}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#afafb0}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#232325;border-color:#363639}.table .thead-light th{color:#343437;background-color:#E0E0E1;border-color:#C1C1C2}.table-dark{color:#fff;background-color:#232325}.table-dark th,.table-dark td,.table-dark thead th{border-color:#363639}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.25em + 2rem + 2px);padding:1rem 1.5rem;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;background-color:#232325;background-clip:padding-box;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:none;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#fff;background-color:#232325;border-color:#e4d2ff;outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.form-control::placeholder{color:#A2A2A4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#454549;opacity:1}input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select.form-control:focus::-ms-value{color:#fff;background-color:#232325}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:1rem 0;margin-bottom:0;font-size:1rem;line-height:1.25;color:#E0E0E1;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled] ~ .form-check-label,.form-check-input:disabled ~ .form-check-label{color:#E0E0E1}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#32E685}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#111112;background-color:rgba(50,230,133,0.9);border-radius:4px}.form-row>.col>.valid-tooltip,.form-row>[class*="col-"]>.valid-tooltip{left:5px}.was-validated :valid ~ .valid-feedback,.was-validated :valid ~ .valid-tooltip,.is-valid ~ .valid-feedback,.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#32E685;padding-right:calc(1.25em + 2rem) !important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2332E685' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3125em + .5rem) center;background-size:calc(.625em + 1rem) calc(.625em + 1rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated select.form-control:valid,select.form-control.is-valid{padding-right:6rem !important;background-position:right 3rem center}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 2rem);background-position:top calc(.3125em + .5rem) right calc(.3125em + .5rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#32E685;padding-right:calc(.75em + 4rem) !important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat,#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2332E685' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 2.5rem/calc(.625em + 1rem) calc(.625em + 1rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#32E685}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#32E685}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#32E685}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#5feca0;background-color:#5feca0}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#32E685}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#32E685}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#32E685;box-shadow:0 0 0 .2rem rgba(50,230,133,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#FF198B}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(255,25,139,0.9);border-radius:4px}.form-row>.col>.invalid-tooltip,.form-row>[class*="col-"]>.invalid-tooltip{left:5px}.was-validated :invalid ~ .invalid-feedback,.was-validated :invalid ~ .invalid-tooltip,.is-invalid ~ .invalid-feedback,.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#FF198B;padding-right:calc(1.25em + 2rem) !important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23FF198B' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23FF198B' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3125em + .5rem) center;background-size:calc(.625em + 1rem) calc(.625em + 1rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{padding-right:6rem !important;background-position:right 3rem center}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 2rem);background-position:top calc(.3125em + .5rem) right calc(.3125em + .5rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#FF198B;padding-right:calc(.75em + 4rem) !important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat,#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23FF198B' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23FF198B' stroke='none'/%3e%3c/svg%3e") center right 2.5rem/calc(.625em + 1rem) calc(.625em + 1rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#FF198B}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#FF198B}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#FF198B}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#ff4ca5;background-color:#ff4ca5}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#FF198B}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#FF198B}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#FF198B;box-shadow:0 0 0 .2rem rgba(255,25,139,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#E0E0E1;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:1rem 1.5rem;font-size:.875rem;line-height:1.25;border-radius:4px;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#E0E0E1;text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:none}.btn.disabled,.btn:disabled{opacity:.65;box-shadow:none}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{box-shadow:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#9A52FF;border-color:#9A52FF;box-shadow:none}.btn-primary:hover{color:#fff;background-color:#842cff;border-color:#7c1fff}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#842cff;border-color:#7c1fff;box-shadow:0 0 0 .2rem rgba(169,108,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#7c1fff;border-color:#7512ff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(169,108,255,0.5)}.btn-secondary{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1;box-shadow:none}.btn-secondary:hover{color:#111112;background-color:#cdcdce;border-color:#c6c6c8}.btn-secondary:focus,.btn-secondary.focus{color:#111112;background-color:#cdcdce;border-color:#c6c6c8;box-shadow:0 0 0 .2rem rgba(193,193,194,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#111112;background-color:#c6c6c8;border-color:#c0c0c2}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(193,193,194,0.5)}.btn-success{color:#111112;background-color:#32E685;border-color:#32E685;box-shadow:none}.btn-success:hover{color:#fff;background-color:#1ad772;border-color:#19cc6c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1ad772;border-color:#19cc6c;box-shadow:0 0 0 .2rem rgba(45,198,116,0.5)}.btn-success.disabled,.btn-success:disabled{color:#111112;background-color:#32E685;border-color:#32E685}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#19cc6c;border-color:#18c166}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(45,198,116,0.5)}.btn-info{color:#fff;background-color:#19A3FF;border-color:#19A3FF;box-shadow:none}.btn-info:hover{color:#fff;background-color:#0091f2;border-color:#0089e5}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#0091f2;border-color:#0089e5;box-shadow:0 0 0 .2rem rgba(60,177,255,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#0089e5;border-color:#0082d8}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,177,255,0.5)}.btn-warning{color:#111112;background-color:#FAFF19;border-color:#FAFF19;box-shadow:none}.btn-warning:hover{color:#111112;background-color:#ecf200;border-color:#e0e500}.btn-warning:focus,.btn-warning.focus{color:#111112;background-color:#ecf200;border-color:#e0e500;box-shadow:0 0 0 .2rem rgba(215,219,24,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#111112;background-color:#e0e500;border-color:#d4d800}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(215,219,24,0.5)}.btn-danger{color:#fff;background-color:#FF198B;border-color:#FF198B;box-shadow:none}.btn-danger:hover{color:#fff;background-color:#f20078;border-color:#e50072}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#f20078;border-color:#e50072;box-shadow:0 0 0 .2rem rgba(255,60,156,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e50072;border-color:#d8006b}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,60,156,0.5)}.btn-light{color:#111112;background-color:#fff;border-color:#fff;box-shadow:none}.btn-light:hover{color:#111112;background-color:#ececec;border-color:#e6e6e6}.btn-light:focus,.btn-light.focus{color:#111112;background-color:#ececec;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(219,219,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#111112;background-color:#fff;border-color:#fff}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#111112;background-color:#e6e6e6;border-color:#dfdfdf}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(219,219,219,0.5)}.btn-dark{color:#fff;background-color:#111112;border-color:#111112;box-shadow:none}.btn-dark:hover{color:#fff;background-color:#000;border-color:#000}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#000;border-color:#000;box-shadow:0 0 0 .2rem rgba(53,53,54,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#111112;border-color:#111112}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(53,53,54,0.5)}.btn-outline-primary{color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:hover{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#9A52FF;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#9A52FF;border-color:#9A52FF}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.btn-outline-secondary{color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:hover{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#E0E0E1;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#111112;background-color:#E0E0E1;border-color:#E0E0E1}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.btn-outline-success{color:#32E685;border-color:#32E685}.btn-outline-success:hover{color:#111112;background-color:#32E685;border-color:#32E685}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#32E685;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#111112;background-color:#32E685;border-color:#32E685}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.btn-outline-info{color:#19A3FF;border-color:#19A3FF}.btn-outline-info:hover{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#19A3FF;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#19A3FF;border-color:#19A3FF}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.btn-outline-warning{color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:hover{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#FAFF19;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#111112;background-color:#FAFF19;border-color:#FAFF19}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.btn-outline-danger{color:#FF198B;border-color:#FF198B}.btn-outline-danger:hover{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#FF198B;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#FF198B;border-color:#FF198B}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.btn-outline-light{color:#fff;border-color:#fff}.btn-outline-light:hover{color:#111112;background-color:#fff;border-color:#fff}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#fff;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#111112;background-color:#fff;border-color:#fff}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-outline-dark{color:#111112;border-color:#111112}.btn-outline-dark:hover{color:#fff;background-color:#111112;border-color:#111112}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#111112;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#111112;border-color:#111112}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.btn-link{font-weight:400;color:#fff;text-decoration:none}.btn-link:hover{color:#9A52FF;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#454549;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.width{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.width{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#E0E0E1;text-align:left;list-style:none;background-color:#111112;background-clip:padding-box;border:1px solid #111112;border-radius:4px;box-shadow:0px 5px 40px #000}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:0;border-right:.4em solid transparent;border-bottom:.4em solid;border-left:.4em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid transparent;border-right:0;border-bottom:.4em solid transparent;border-left:.4em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.34em;vertical-align:.34em;content:"";border-top:.4em solid transparent;border-right:.4em solid;border-bottom:.4em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #000}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#fff;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#9A52FF;text-decoration:none;background-color:#111112}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:rgba(0,0,0,0)}.dropdown-item.disabled,.dropdown-item:disabled{color:#838386;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#454549;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:none}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:1rem 1.5rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;text-align:center;white-space:nowrap;background-color:#454549;border:1px solid rgba(0,0,0,0);border-radius:4px}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:8px}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:2.5rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;print-color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#9A52FF;background-color:#9A52FF;box-shadow:}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:none,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#e4d2ff}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#fff;border-color:#fff;box-shadow:}.custom-control-input[disabled] ~ .custom-control-label,.custom-control-input:disabled ~ .custom-control-label{color:#454549}.custom-control-input[disabled] ~ .custom-control-label::before,.custom-control-input:disabled ~ .custom-control-label::before{background-color:#454549}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#232325;border:1px solid #838386;box-shadow:none}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50% / 50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:4px}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#9A52FF;background-color:#9A52FF;box-shadow:}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#838386;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#232325;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(154,82,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem 1rem 1.5rem;font-size:1rem;font-weight:400;line-height:1.25;color:#fff;vertical-align:middle;background:#232325 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23232325' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 1.5rem center/8px 10px no-repeat;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075);appearance:none}.custom-select:focus{border-color:#e4d2ff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 0 .2rem rgba(154,82,255,0.25)}.custom-select:focus::-ms-value{color:#fff;background-color:#232325}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:1.5rem;background-image:none}.custom-select:disabled{color:#454549;background-color:#E0E0E1}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.25em + 2rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.25em + 2rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#e4d2ff;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.custom-file-input[disabled] ~ .custom-file-label,.custom-file-input:disabled ~ .custom-file-label{background-color:#454549}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.25em + 2rem + 2px);padding:1rem 1.5rem;overflow:hidden;font-weight:400;line-height:1.25;color:#fff;background-color:#232325;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:none}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.25em + 2rem);padding:1rem 1.5rem;line-height:1.25;color:#fff;content:"Browse";background-color:#454549;border-left:inherit;border-radius:0 4px 4px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #111112,0 0 0 .2rem rgba(154,82,255,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#C1C1C2;border-color:transparent;border-radius:1rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#C1C1C2;border-color:transparent;border-radius:1rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#9A52FF;border:0;border-radius:1rem;box-shadow:0 0.1rem 0.25rem rgba(0,0,0,0.1);transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-range::-ms-fill-lower{background-color:#C1C1C2;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#C1C1C2;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#838386}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#838386}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#838386}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:1rem 2rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#454549;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #C1C1C2}.nav-tabs .nav-link{margin-bottom:-1px;background-color:transparent;border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:#E0E0E1 #E0E0E1 #C1C1C2}.nav-tabs .nav-link.disabled{color:#454549;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#343437;background-color:#111112;border-color:#C1C1C2 #C1C1C2 #111112}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#9A52FF}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:1.25rem;padding-bottom:1.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:1rem;padding-bottom:1rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50% / 100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:2rem;padding-left:2rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:#454549}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:#454549;border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='%23454549' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#454549}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#9A52FF}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:#fff;border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='%23fff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:#fff}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#232325;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:8px}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:7px;border-top-right-radius:7px}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:7px;border-bottom-left-radius:7px}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:2rem}.card-title{margin-bottom:2rem}.card-subtitle{margin-top:-1rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:2rem 2rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:7px 7px 0 0}.card-footer{padding:2rem 2rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 7px 7px}.card-header-tabs{margin-right:-1rem;margin-bottom:-2rem;margin-left:-1rem;border-bottom:0}.card-header-pills{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:7px}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:7px;border-top-right-radius:7px}.card-img,.card-img-bottom{border-bottom-right-radius:7px;border-bottom-left-radius:7px}.card-deck .card{margin-bottom:1.25rem}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-1.25rem;margin-left:-1.25rem}.card-deck .card{flex:1 0 0%;margin-right:1.25rem;margin-bottom:0;margin-left:1.25rem}}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:2rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:2rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#111112;border-radius:4px}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#454549;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#A2A2A4}.pagination{display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#fff;background-color:#fff;border:1px solid #C1C1C2}.page-link:hover{z-index:2;color:#9A52FF;text-decoration:none;background-color:#E0E0E1;border-color:#C1C1C2}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#9A52FF;border-color:#9A52FF}.page-item.disabled .page-link{color:#454549;pointer-events:none;cursor:auto;background-color:#fff;border-color:#C1C1C2}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:4px;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#9A52FF}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#7c1fff}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(154,82,255,0.5)}.badge-secondary{color:#111112;background-color:#E0E0E1}a.badge-secondary:hover,a.badge-secondary:focus{color:#111112;background-color:#c6c6c8}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(224,224,225,0.5)}.badge-success{color:#111112;background-color:#32E685}a.badge-success:hover,a.badge-success:focus{color:#111112;background-color:#19cc6c}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(50,230,133,0.5)}.badge-info{color:#fff;background-color:#19A3FF}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#0089e5}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(25,163,255,0.5)}.badge-warning{color:#111112;background-color:#FAFF19}a.badge-warning:hover,a.badge-warning:focus{color:#111112;background-color:#e0e500}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(250,255,25,0.5)}.badge-danger{color:#fff;background-color:#FF198B}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#e50072}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,25,139,0.5)}.badge-light{color:#111112;background-color:#fff}a.badge-light:hover,a.badge-light:focus{color:#111112;background-color:#e6e6e6}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.badge-dark{color:#fff;background-color:#111112}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#000}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(17,17,18,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#E0E0E1;border-radius:8px}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:4px}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#502b85;background-color:#ebdcff;border-color:#e3cfff}.alert-primary hr{border-top-color:#d4b6ff}.alert-primary .alert-link{color:#391f5e}.alert-secondary{color:#747475;background-color:#f9f9f9;border-color:#f6f6f7}.alert-secondary hr{border-top-color:#e9e9eb}.alert-secondary .alert-link{color:#5b5b5b}.alert-success{color:#1a7845;background-color:#d6fae7;border-color:#c6f8dd}.alert-success hr{border-top-color:#aff5cf}.alert-success .alert-link{color:#114e2d}.alert-info{color:#0d5585;background-color:#d1edff;border-color:#bfe5ff}.alert-info hr{border-top-color:#a6dbff}.alert-info .alert-link{color:#083757}.alert-warning{color:#82850d;background-color:#feffd1;border-color:#feffbf}.alert-warning hr{border-top-color:#feffa6}.alert-warning .alert-link{color:#555708}.alert-danger{color:#850d48;background-color:#ffd1e8;border-color:#ffbfdf}.alert-danger hr{border-top-color:#ffa6d2}.alert-danger .alert-link{color:#57082f}.alert-light{color:#858585;background-color:#fff;border-color:#fff}.alert-light hr{border-top-color:#f2f2f2}.alert-light .alert-link{color:#6c6c6c}.alert-dark{color:#090909;background-color:#cfcfd0;border-color:#bcbcbd}.alert-dark hr{border-top-color:#afafb0}.alert-dark .alert-link{color:#000}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#111112;border-radius:4px;box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#9A52FF;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:4px}.list-group-item-action{width:100%;color:#343437;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#343437;text-decoration:none;background-color:#F5F5F7}.list-group-item-action:active{color:#E0E0E1;background-color:#E0E0E1}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#111112;border:1px solid #232325}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#E0E0E1;pointer-events:none;background-color:#111112}.list-group-item.active{z-index:2;color:#fff;background-color:#9A52FF;border-color:#9A52FF}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:4px;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#502b85;background-color:#e3cfff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#502b85;background-color:#d4b6ff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#502b85;border-color:#502b85}.list-group-item-secondary{color:#747475;background-color:#f6f6f7}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#747475;background-color:#e9e9eb}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#747475;border-color:#747475}.list-group-item-success{color:#1a7845;background-color:#c6f8dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#1a7845;background-color:#aff5cf}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1a7845;border-color:#1a7845}.list-group-item-info{color:#0d5585;background-color:#bfe5ff}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0d5585;background-color:#a6dbff}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0d5585;border-color:#0d5585}.list-group-item-warning{color:#82850d;background-color:#feffbf}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#82850d;background-color:#feffa6}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#82850d;border-color:#82850d}.list-group-item-danger{color:#850d48;background-color:#ffbfdf}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#850d48;background-color:#ffa6d2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#850d48;border-color:#850d48}.list-group-item-light{color:#858585;background-color:#fff}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#858585;background-color:#f2f2f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#858585;border-color:#858585}.list-group-item-dark{color:#090909;background-color:#bcbcbd}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#090909;background-color:#afafb0}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#090909;border-color:#090909}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#FF198B;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#FF198B;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#454549;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#000;background-clip:padding-box;border:1px solid #E0E0E1;border-radius:8px;box-shadow:0 0.25rem 0.5rem rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #C1C1C2;border-top-left-radius:7px;border-top-right-radius:7px}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #C1C1C2;border-bottom-right-radius:7px;border-bottom-left-radius:7px}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-content{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.5)}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:4px}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Work Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:8px;box-shadow:0 0.25rem 0.5rem rgba(0,0,0,0.2)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 8px}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:8px 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc(-.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:8px 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#fff;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#E0E0E1}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50% / 100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentcolor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentcolor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#9A52FF !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#7c1fff !important}.bg-secondary{background-color:#E0E0E1 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#c6c6c8 !important}.bg-success{background-color:#32E685 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#19cc6c !important}.bg-info{background-color:#19A3FF !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#0089e5 !important}.bg-warning{background-color:#FAFF19 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#e0e500 !important}.bg-danger{background-color:#FF198B !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#e50072 !important}.bg-light{background-color:#fff !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#e6e6e6 !important}.bg-dark{background-color:#111112 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#000 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #C1C1C2 !important}.border-top{border-top:1px solid #C1C1C2 !important}.border-right{border-right:1px solid #C1C1C2 !important}.border-bottom{border-bottom:1px solid #C1C1C2 !important}.border-left{border-left:1px solid #C1C1C2 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#9A52FF !important}.border-secondary{border-color:#E0E0E1 !important}.border-success{border-color:#32E685 !important}.border-info{border-color:#19A3FF !important}.border-warning{border-color:#FAFF19 !important}.border-danger{border-color:#FF198B !important}.border-light{border-color:#fff !important}.border-dark{border-color:#111112 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:4px !important}.rounded{border-radius:4px !important}.rounded-top{border-top-left-radius:4px !important;border-top-right-radius:4px !important}.rounded-right{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}.rounded-bottom{border-bottom-right-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-left{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-lg{border-radius:8px !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:"Space Mono",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#9A52FF !important}a.text-primary:hover,a.text-primary:focus{color:#6d06ff !important}.text-secondary{color:#E0E0E1 !important}a.text-secondary:hover,a.text-secondary:focus{color:#b9b9bb !important}.text-success{color:#32E685 !important}a.text-success:hover,a.text-success:focus{color:#16b560 !important}.text-info{color:#19A3FF !important}a.text-info:hover,a.text-info:focus{color:#007acc !important}.text-warning{color:#FAFF19 !important}a.text-warning:hover,a.text-warning:focus{color:#c7cc00 !important}.text-danger{color:#FF198B !important}a.text-danger:hover,a.text-danger:focus{color:#cc0065 !important}.text-light{color:#fff !important}a.text-light:hover,a.text-light:focus{color:#d9d9d9 !important}.text-dark{color:#111112 !important}a.text-dark:hover,a.text-dark:focus{color:#000 !important}.text-body{color:#E0E0E1 !important}.text-muted{color:#E0E0E1 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #838386;page-break-inside:avoid}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #C1C1C2 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#C1C1C2}.table .thead-dark th{color:inherit;border-color:#C1C1C2}}body{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}pre,code{font-feature-settings:"liga" 0;font-variant-ligatures:none}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:bold}h1,.h1{font-size:3.875rem;line-height:70px}@media (max-width: 480px){h1,.h1{font-size:2.625rem;line-height:48px}}h2,.h2{font-size:3.5rem;line-height:62px}@media (max-width: 767.98px){h2,.h2{font-size:1.75rem;line-height:34px}}@media (max-width: 767.98px){h2-sm,.h2-sm{font-size:1.75rem !important;line-height:34px !important}}h3,.h3{font-size:3rem;line-height:52px}@media (max-width: 767.98px){h3,.h3{font-size:1.5rem;line-height:28px}}@media (max-width: 767.98px){h3-sm,.h3-sm{font-size:1.5rem;line-height:28px}}h4,.h4{font-size:2rem;line-height:38px}@media (max-width: 767.98px){h4,.h4{font-size:1.25rem;line-height:26px}}h5,.h5{font-size:1.5rem;line-height:32px}@media (max-width: 767.98px){h5,.h5{font-size:1.125rem;line-height:26px}}h6,.h6{font-size:1.25rem;line-height:26px}@media (max-width: 767.98px){h6,.h6{font-size:1rem;line-height:24px}}.longform{font-size:1.5rem;line-height:32px;color:#F5F5F7;font-weight:500}@media (max-width: 767.98px){.longform{font-size:1.25rem;line-height:26px}}.numbers{font-size:6rem;line-height:104px;font-weight:bold;color:#fff}@media (max-width: 767.98px){.numbers{font-size:3.875rem;line-height:70px}}p{font-size:1rem;line-height:24px}.fs-base{font-size:1rem}.fs-3{font-size:0.75rem;line-height:1rem}.fs-4-5{font-size:1.125rem}.fs-5{font-size:1.25rem}.fs-5-5{font-size:1.375rem}.fs-6{font-size:1.5rem}.normal{font-weight:normal}.bold{font-weight:bold}.text-largest{font-size:1.5rem;font-weight:normal}.text-large{font-size:1.125rem}.text-small{font-size:0.875rem}.text-smaller{font-size:0.75rem}.text-smallest{font-size:0.625rem}.arrow-link{text-decoration:none}.arrow-link:after{content:url(../img/icon-long-arrow.svg);width:28px;padding-left:7px;transition:all .2s ease-in-out;display:inline-block;text-decoration:none}.arrow-link:hover:after{padding-left:14px}.lang-ja{font-family:'Work Sans', 'Noto Sans JP', sans-serif}.lang-ja h1,.lang-ja h2,.lang-ja h3,.lang-ja h4,.lang-ja h5,.lang-ja .github-edit-wrap .github-edit,.lang-ja .navbar .navbar-nav .nav-link,.lang-ja .content .children-display li a,.lang-ja .right-sidebar .level-1 a,.lang-ja .right-sidebar .separator,.lang-ja .use-case-step-num{font-family:'Work Sans', 'Noto Sans JP', sans-serif}.search .input-group-text{border-width:0;color:#fff;background-color:#232325;border-radius:4px 0 0 4px;padding:0.5rem 0.5rem 0.5rem 1rem;line-height:1.5}.search .ds-input{background-color:#232325;border-radius:0 4px 4px 0;padding:0.75rem 1rem 0.75rem 0.5rem;width:100%;border:1px solid #232325}.search .ds-input:focus{box-shadow:none;border-color:#9A52FF}.search .algolia-autocomplete{flex-grow:1}#algolia-autocomplete-listbox-0{z-index:1100 !important}.xrp-ledger-dev-portal .DocSearch-Modal{top:85px;background-color:#232325;box-shadow:none}.xrp-ledger-dev-portal .DocSearch-Form{box-shadow:inset 0 0 0 2px #9A52FF;background-color:#232325}.xrp-ledger-dev-portal .DocSearch-Hit-source{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Hits mark{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Hit-source,.xrp-ledger-dev-portal .DocSearch-Hit-Container,.xrp-ledger-dev-portal .DocSearch-Footer{background-color:#232325}.xrp-ledger-dev-portal .DocSearch-Hit a{background-color:#232325;box-shadow:none}.xrp-ledger-dev-portal .DocSearch-Hit-source{color:#A2A2A4}.xrp-ledger-dev-portal .DocSearch-Input{color:#fff}.xrp-ledger-dev-portal .DocSearch-Hit-title,.xrp-ledger-dev-portal .DocSearch-Hit-path,.xrp-ledger-dev-portal .DocSearch-Label,.xrp-ledger-dev-portal .DocSearch-Help{color:#F5F5F7 !important}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a{background:#343437}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-Container{background-color:#343437}.xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a mark{color:#9A52FF !important}.xrp-ledger-dev-portal .DocSearch-Prefill{color:#9A52FF}.xrp-ledger-dev-portal .DocSearch-Button{background:#232325;width:100%}.xrp-ledger-dev-portal .DocSearch-Button:hover{background:#232325;border-radius:40px;box-shadow:inset 0 0 0 2px #9A52FF}.xrp-ledger-dev-portal .DocSearch-Button:hover .DocSearch-Button-Placeholder{color:#fff}.xrp-ledger-dev-portal .DocSearch-Search-Icon{color:#fff !important}.xrp-ledger-dev-portal .DocSearch-Modal{margin-top:-20px;max-width:55%;margin-right:13.5em}@media (max-width: 991.98px){.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu{min-width:unset}.xrp-ledger-dev-portal .DocSearch-Modal{top:127px;max-width:100%;margin-left:10px;margin-right:20px}}.xrp-ledger-dev-portal .DocSearch-Container{z-index:99999 !important;background-color:transparent !important}.xrp-ledger-dev-portal .DocSearch-Logo svg .cls-1,.xrp-ledger-dev-portal .DocSearch-Logo svg .cls-2{fill:white}.xrp-ledger-dev-portal .DocSearch-Commands-Key{color:#232325}.xrp-ledger-dev-portal #centersearchboxcontainer{justify-content:center}.xrp-ledger-dev-portal #topsearchboxcontainer{justify-content:right}.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu [class^="ds-dataset-"]{background-color:#111112;border:0;border-radius:8px}.xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu::before{background-color:#111112;border:0}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion{background-color:#111112}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header{color:#fff;border:0;border-bottom:2px solid #9A52FF;font-weight:bold}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{color:#fff}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--title{color:#fff}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text{font-size:0.8rem;color:#E0E0E1}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#fff;background-color:#343437}.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:none;background-color:#343437}#xrp-ledger-dev-portal{overflow:auto !important}body{position:relative}section{position:relative}.landing{padding:0}.square{position:relative;flex-basis:calc(50% - 30px);margin:15px;box-sizing:border-box;justify-content:center;align-items:center;border-radius:8px}.square::before{content:'';display:block;padding-top:100%}@media (min-width: 992px){.square{flex-basis:calc(25% - 30px)}}.square-50{flex-basis:calc(50% - 30px)}@media (max-width: 767.98px){.square-50{flex-basis:calc(50% - 20px)}}.nav-grid-lg{display:flex;flex-direction:column}.nav-grid-lg .nav-item{width:100%}.nav-grid-lg .nav-item .nav-link{display:flex}.nav-grid-lg .nav-item .nav-link span{flex-grow:0}.nav-grid-lg .nav-item .nav-link img{max-height:2rem}.nav-grid-lg .nav-grid-head{margin-top:2.5rem}@media (min-width: 992px){.nav-grid-lg{display:grid;grid-auto-flow:column;grid-column-gap:80px}.nav-grid-lg .nav-grid-head{margin-top:0}}.col-lg{padding-left:0;padding-right:0}@media (min-width: 992px){.cols-of-1{grid-template-rows:repeat(1, min-content)}}@media (min-width: 992px){.cols-of-2{grid-template-rows:repeat(2, min-content)}}@media (min-width: 992px){.cols-of-3{grid-template-rows:repeat(3, min-content)}}@media (min-width: 992px){.cols-of-4{grid-template-rows:repeat(4, min-content)}}@media (min-width: 992px){.cols-of-5{grid-template-rows:repeat(5, min-content)}}@media (min-width: 992px){.cols-of-6{grid-template-rows:repeat(6, min-content)}}.card-grid{display:grid;grid-gap:40px;padding:0;width:100%;grid-template-columns:1fr}@media (min-width: 992px){.card-grid{grid-gap:80px}}.card-grid .col{padding-left:0;padding-right:0;min-width:100%}.card-grid.card-grid-4xN{grid-auto-rows:auto;grid-template-columns:repeat(2, 1fr)}@media (min-width: 992px){.card-grid.card-grid-4xN{grid-template-columns:repeat(4, 1fr)}}.card-grid.card-grid-3xN{grid-auto-rows:auto}@media (min-width: 992px){.card-grid.card-grid-3xN{grid-template-columns:1fr 1fr 1fr}}.card-grid.card-grid-2xN{grid-template-columns:1fr 1fr;grid-auto-rows:auto}@media (max-width: 991.98px){.card-grid.card-grid-2xN{grid-template-columns:1fr}}.card-grid.card-grid-1x2{grid-template-columns:1fr 2fr;grid-auto-rows:auto}@media (max-width: 991.98px){.card-grid.card-grid-1x2{display:flex}}.card-grid .card{padding:20px;border:0;min-height:264px}@media (min-width: 768px){.card-grid .card{min-height:347px}}@media (min-width: 992px){.card-grid .card{padding:40px}}.card-grid .card .card-body{padding:8px;padding-bottom:24px}.card-grid.section-hero{padding-left:0}.container-new{display:flex;flex-wrap:wrap;margin:0 auto;padding:0 32px;max-width:100%;z-index:1}@media (min-width: 768px){.container-new{max-width:608px}}@media (min-width: 992px){.container-new{max-width:942px}}@media (min-width: 1200px){.container-new{max-width:1280px}}.xrp-ledger-dev-portal.sidebar-primary .main{z-index:5;padding:2rem;min-height:700px}@media (min-width: 992px){.xrp-ledger-dev-portal.sidebar-primary .main{top:80px}}.left-sidebar{padding:2rem}.left-sidebar .external-link::after{background-position:left 6px bottom 1px;width:2rem}.left-sidebar:hover::after{transform:translate(3px, -3px)}@media (min-width: 992px){.left-sidebar{position:sticky;max-height:calc(100vh - 80px);top:80px;left:0;overflow:auto;border:0}}.right-sidebar{padding:2rem;border:1px solid #454549}@media (min-width: 992px){.right-sidebar{position:sticky;max-height:calc(100vh - 80px);top:80px;right:0;overflow:auto;border:0}}@media (max-width: 991.98px){.right-sidebar .card{padding-left:0}#page-toc-wrapper{position:static;clear:both;overflow-y:inherit;max-width:100%;max-height:inherit;word-break:break-all}.main{overflow-wrap:break-word;word-wrap:break-word;overflow:hidden}}@media (max-width: 480px){html{overflow-x:hidden !important}}@media (max-width: 400px){.navbar .navbar-brand .brand-text{margin-right:0;letter-spacing:-0.08rem}.navbar .navbar-brand{margin-right:0}.navbar .navbar-brand .logo{margin-right:0;margin-left:-1rem}.btn{white-space:normal}}.timeline-wrapper{z-index:999;position:relative}.timeline:before{content:'';position:absolute;top:-40px;left:18px;height:95%;width:4px;background:linear-gradient(180deg, #feff01 0%, #ff2d9a 33%, #a3088f 66%, rgba(44,4,128,0.85) 100%)}@media (max-width: 991.98px){.timeline:before{left:8px}}.timeline-dot{margin-top:94px;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0;width:18px;height:18px;border-radius:50%;background:#111112;box-sizing:border-box}.timeline-block:first-child .timeline-dot{border:3px solid #FAFF19}.timeline-block:nth-child(2) .timeline-dot{border:3px solid #FF884B}.timeline-block:nth-child(3) .timeline-dot{border:3px solid #C000E5}.timeline-block:nth-child(4) .timeline-dot{border:3px solid #40004C}.timeline-block{display:flex;position:relative;z-index:1}.timeline-content{flex-grow:1;position:relative;margin-left:1.25em}.timeline h4{margin-top:-4px}@media (min-width: 768px){.timeline:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.timeline-dot{-ms-flex-order:1;order:1;margin-left:calc(5% - 9px);will-change:transform}.timeline-block:nth-child(even){-ms-flex-direction:row-reverse;flex-direction:row-reverse}.timeline-dot{margin-right:calc(5% - 9px)}.timeline-content{width:45%;-ms-flex-positive:0;flex-grow:0;will-change:transform;margin:0;--line-height-multiplier: 1.2}}aside li a{color:#fff;text-decoration:none;font-size:1.05rem}aside .sidenav_cat_title{color:#fff}aside a:hover,aside .sidenav_cat_title:hover{color:#9A52FF}aside a.active,aside a.active:hover,aside .active>a,aside .active>a:hover{color:#9A52FF;font-weight:700}aside a.active-parent,aside .active-parent>a{font-weight:700}.page-toc .level-1 a,.command-list .separator{font-weight:700;color:#fff}.nav-toggler{position:absolute;width:1.75em;height:1.75em;line-height:0;display:grid;justify-content:center;align-content:center}.nav-toggler::after{display:inline-block;margin-left:.34em;vertical-align:.34em;content:"";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}.nav-toggler:empty::after{margin-left:0}.nav-toggler::after{transition-duration:0.3s}.nav-toggler.collapsed::after{transform:rotate(-90deg)}.dactyl-tree-nav nav{margin-left:1rem;padding-left:0;border-left:1px solid #fff}.dactyl-tree-nav nav .nav-link:hover,.dactyl-tree-nav nav .nav-link:active{border-left:1px solid #9A52FF;margin-left:-1px}.dactyl-tree-nav nav .active>.nav-link{border-left:2px solid #9A52FF;margin-left:-1px;padding-left:calc(1rem - 1px)}.dactyl-tree-nav .nav-item{position:relative}.dactyl-tree-nav .nav-item .nav-link{padding:0.25rem 1rem;font-size:0.9rem}.dactyl-tree-nav .nav-item.nav-parent{padding-top:0}.dactyl-tree-nav .nav-item.nav-parent .nav-link{padding-left:0;padding-top:0;font-size:1.125rem;line-height:initial}.dactyl-tree-nav .nav-item .nav-toggler+.nav-link{padding-left:2rem}.dactyl-tree-nav>.nav-item{padding:.5rem 0;font-size:1.125rem}.dactyl-tree-nav>.nav-item>.nav-link{font-weight:bold}.dactyl-tree-nav .collapsing.nav{flex-wrap:unset}.toc-header{font-weight:bold;font-size:14px;padding:1rem 0}.toc-header h4{line-height:20px;font-size:1.2em;padding:0;margin:0}#page-toc-wrapper .card-body{list-style-type:none}.page-toc,.command-list{padding-left:0;border-left:1px solid #fff}.page-toc li,.command-list li{list-style-type:none;padding:0}.page-toc li.separator,.command-list li.separator{padding:.25rem 1rem}.page-toc li a,.command-list li a{display:block;margin-top:5px;padding:.25rem 1rem;font-size:0.9rem}.page-toc li a:hover,.page-toc li a .active,.command-list li a:hover,.command-list li a .active{text-decoration:none;border-left:1px solid #9A52FF;margin-left:-1px}.page-toc li.active a,.page-toc li.active a:hover,.command-list li.active a,.command-list li.active a:hover{border-left:2px solid #9A52FF;padding-left:calc(1rem - 1px);margin-left:-1px}.page-toc .level-3,.command-list .level-3{margin-left:16px;border-left:1px solid #fff;margin-bottom:0;padding-bottom:5px}.page-toc .level-3 a,.command-list .level-3 a{margin-top:0;padding-bottom:5px}.page-toc.no-sideline,.command-list.no-sideline{border-left:0}.page-toc.no-sideline a:hover,.page-toc.no-sideline a.active,.command-list.no-sideline a:hover,.command-list.no-sideline a.active{border-left:0;margin-left:0}.command-list li a{margin-top:0}.h32{height:32px}.w32{width:32px}.h36{height:36px}.w36{width:36px}.h40{height:40px}.w40{width:40px}.w44{width:44px}.w48{width:48px}.w-100{width:100%}.min-vh100{min-height:100vh}.vw100{width:100vw;min-width:100%}@media (max-width: 767.98px){.mb-3-sm-i{margin-bottom:1rem !important}}.ml-5{margin-left:1.25rem}@media (min-width: 768px){.ml-5-until-md{margin-left:1.25rem}}.mr-5{margin-right:1.25rem}@media (min-width: 768px){.mr-5-until-md{margin-right:1.25rem}}.mb-6{margin-bottom:1.5rem}@media (max-width: 767.98px){.mb-6-sm{margin-bottom:1.5rem}}.mt-6{margin-top:1.5rem}@media (min-width: 576px){.mt-6-until-sm{margin-top:1.5rem !important}}.mb-8{margin-bottom:2rem}@media (max-width: 767.98px){.mb-8-sm{margin-bottom:2rem}}.mt-8{margin-top:2rem}@media (min-width: 576px){.mt-8-until-sm{margin-top:2rem !important}}.mt-9{margin-top:2.25rem}.mb-9{margin-bottom:2.25rem}.mt-10{margin-top:2.5rem}@media (max-width: 767.98px){.mt-10-sm{margin-top:2.5rem}}.mb-10{margin-bottom:2.5rem}@media (min-width: 576px){.mb-10-until-sm{margin-bottom:2.5rem}}@media (max-width: 767.98px){.mb-10-sm{margin-bottom:2.5rem}}.ml-10{margin-left:2.5rem}.mr-10{margin-right:2.5rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}@media (min-width: 576px){.mx-10-until-sm{margin-left:2.5rem;margin-right:2.5rem}}@media (min-width: 768px){.mx-10-until-md{margin-left:2.5rem;margin-right:2.5rem}}@media (max-width: 767.98px){.mx-10-sm{margin-left:2.5rem;margin-right:2.5rem}}.mt-12{margin-top:3rem}.mb-12{margin-bottom:3rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mt-13{margin-top:3.25rem}.mb-13{margin-bottom:3.25rem}.mt-14{margin-top:3.5rem}.mt-16{margin-top:4rem}@media (max-width: 767.98px){.mt-16-sm{margin-top:4rem}}.mb-16{margin-bottom:4rem}@media (max-width: 767.98px){.mb-16-sm{margin-bottom:4rem}}.mb-18{margin-bottom:4.5rem}.mt-20{margin-top:5rem}@media (max-width: 767.98px){.mt-20-sm{margin-top:5rem}}@media (min-width: 576px){.mt-20-until-sm{margin-top:5rem}}.mb-20{margin-bottom:5rem}@media (max-width: 767.98px){.mb-20-sm{margin-bottom:5rem}}@media (min-width: 576px){.mb-20-until-sm{margin-bottom:5rem}}.my-20{margin-top:5rem;margin-bottom:5rem}.my-26{margin-top:6.5rem;margin-bottom:6.5rem}.mb-30{margin-bottom:7.5rem}.mt-30{margin-top:7.5rem}@media (min-width: 576px){.mt-30-until-sm{margin-top:7.5rem}}.mt-40{margin-top:10rem}@media (min-width: 576px){.mt-40-until-sm{margin-top:10rem}}.mb-40{margin-bottom:10rem}@media (min-width: 576px){.mb-40-until-sm{margin-bottom:10rem}}.mb-49{margin-bottom:12.25rem}.mb-50{margin-bottom:12.5rem}@media (min-width: 576px){.mb-50-until-sm{margin-bottom:12.5rem}}@media (max-width: 767.98px){.pl-0-sm{padding-left:0 !important}}@media (max-width: 767.98px){.pr-0-sm{padding-right:0 !important}}@media (max-width: 767.98px){.pt-3-sm{padding-top:1rem !important}}.p-6{padding:1.5rem}@media (max-width: 767.98px){.p-6-sm{padding:1.5rem}}.p-8{padding:2rem}@media (max-width: 767.98px){.p-8-sm{padding:2rem}}.p-10{padding:2.5rem}@media (min-width: 576px){.p-10-until-sm{padding:2.5rem}}.py-20{padding-bottom:5rem;padding-top:5rem}.px-20{padding-left:5rem;padding-right:5rem}.pt-20{padding-top:5rem}.pb-20{padding-bottom:5rem}.py-26{padding-top:6.5rem;padding-bottom:6.5rem}@media (max-width: 767.98px){.py-26{padding-top:2.5rem;padding-bottom:2.5rem}}.pt-26{padding-top:2.5rem}@media (min-width: 576px){.pt-26-until-sm{padding-top:6.5rem}}.pb-26{padding-bottom:6.5rem}@media (min-width: 576px){.pb-26-until-sm{padding-bottom:6.5rem}}.pt-30{padding-top:7.5rem}.pb-30{padding-bottom:7.5rem}.pt-40{padding-top:10rem}@media (min-width: 576px){.pt-40-until-sm{padding-top:10rem}}.pb-40{padding-bottom:10rem}.pb-50{padding-bottom:12.5rem}.pt-50{padding-top:12.5rem}.py-50{padding-bottom:12.5rem;padding-top:12.5rem}@media (min-width: 576px){.py-50-until-sm{padding-bottom:12.5rem;padding-top:12.5rem}}.floating-nav{top:6rem}.last-section{margin-bottom:100px}.bottom-0{bottom:0}.justify-center{justify-content:center}@media (max-width: 767.98px){.justify-center-sm{justify-content:center}}@media (max-width: 575.98px){.overflow-xs{overflow:scroll}.overflow-x-xs{overflow-x:scroll;overflow-y:hidden}}@media (min-width: 768px){.position-sm-absolute{position:absolute}}.va-middle{vertical-align:middle}.ls-none{list-style:none}.no-wrap{white-space:nowrap}.align-items-stretch{align-items:stretch}.underline{text-decoration:underline}@media (max-width: 575.98px){.d-none-xs{display:none}}@media (max-width: 767.98px){.d-none-sm{display:none}}.d-block{display:block}.border-green{border:1px solid #9A52FF}.border-none{border:none !important}.grey-400{color:#A2A2A4}.grey-500{color:#838386}.grey-700{color:#343437}.white{color:#fff}.stat-highlight{color:#32E685}.br-8{border-radius:8px}@media (max-width: 767.98px){br.until-sm{content:''}}.z-index-1{z-index:1}.bb-gray{border-bottom:1px solid #454549}@keyframes arrowDance{0%{padding-left:7px}50%{padding-left:14px}100%{padding-left:7px}}@keyframes arrowDance2{0%{right:0}50%{right:7px}100%{right:0}}@keyframes arrowDanceDiag{0%{right:7px;margin-top:0}50%{right:0;margin-top:-7px}100%{right:7px;margin-top:0}}.btn,.content a.button,.content .btn{font-weight:bold;cursor:pointer;text-decoration:none;transition:0.2s;padding:0.5rem 1rem;line-height:16px}.content a.button{padding:.5rem 1rem;margin:0 0.5rem;display:inline-block}.btn.disabled,button.disabled,.btn[disabled="disabled"],button[disabled="disabled"]{cursor:not-allowed}.btn-primary code,.btn-secondary code{color:inherit}.btn-primary{background:#7919FF;font-weight:bold;color:#fff;border:none;border-color:transparent}.btn-primary:hover{background:#5F00E5}.btn-primary.disabled,.btn-primary[disabled="disabled"]{background:#4A00B2}.btn-primary.disabled:hover,.btn-primary[disabled="disabled"]:hover{background:#4A00B2}@media (max-width: 767.98px){.btn-arrow{display:block;width:100%}}.btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right.svg);position:relative;top:1px;vertical-align:middle;padding-left:8px;-webkit-transition:transform 0.3s ease-out;-moz-transition:transform 0.3s ease-out;-ms-transition:transform 0.3s ease-out;-o-transition:transform 0.3s ease-out;transition:transform 0.3s ease-out}.btn-arrow:hover{background:#5F00E5 !important;border:none}.btn-arrow:hover::after{-webkit-transform:translateX(4px);-moz-transform:translateX(4px);-ms-transform:translateX(4px);-o-transform:translateX(4px);transform:translateX(4px)}.btn-arrow-out::after{background-position:left 0px bottom 0px;content:"\00a0";background-image:url(../img/icons/arrow-up-right-white.svg);background-repeat:no-repeat;display:inline-block;padding:4px 8px 4px 12px;transition:background-position 0.3s ease-in-out;margin-left:4px}.btn-arrow-out:hover::after{background-position:left 4px bottom 4px}@media (max-width: 767.98px){.btn-arrow-out{display:block;width:100%}}.jump-to-top{display:none;position:fixed;bottom:36px;right:36px;font-weight:700;z-index:1000}.jump-to-top::after{display:none}.accordian-row{background:#232325;border-radius:5px;padding:32px}.accordian-row h3 a{position:relative;padding-right:2rem}.accordian-row h3 a:hover{color:#fff}.accordian-row .chevron{position:absolute;top:0;right:0}.content table{clear:right;margin-bottom:48px}.content table code{word-break:normal;white-space:nowrap}th{border-bottom:2px solid #E0E0E1}tr{border-bottom:1px solid #E0E0E1}th,td{padding:0.2em;vertical-align:text-top}td:nth-child(1){font-weight:bold}.landing-table th,.landing-table tr{border-bottom:2px solid #454549}.landing-table td{width:33.33%;padding:16px 40px 16px 0}.landing-table td:nth-child(1){font-weight:normal}@media (max-width: 767.98px){.landing-table td{font-size:0.875rem}}.landing-table tr:last-child{border-bottom:none}.landing-table tbody td{color:#E0E0E1}.dblue{color:#454549}#overview-table td:nth-child(1){width:40%}#overview-table td:nth-child(2){width:30%}#overview-table tbody td{padding:2rem 0.75rem}@media (max-width: 991.98px){#overview-table{font-size:0.875rem}#overview-table thead .h4{font-size:1.125rem}}.content table{clear:right;margin-bottom:48px}.content table code{word-break:normal;white-space:nowrap}th{border-bottom:2px solid #E0E0E1}tr{border-bottom:1px solid #E0E0E1}th,td{padding:0.2em;vertical-align:text-top}td:nth-child(1){font-weight:bold}.landing-table th,.landing-table tr{border-bottom:2px solid #454549}.landing-table td{width:33.33%;padding:16px 40px 16px 0}.landing-table td:nth-child(1){font-weight:normal}@media (max-width: 767.98px){.landing-table td{font-size:0.875rem}}.landing-table tr:last-child{border-bottom:none}.landing-table tbody td{color:#E0E0E1}.dblue{color:#454549}#overview-table td:nth-child(1){width:40%}#overview-table td:nth-child(2){width:30%}#overview-table tbody td{padding:2rem 0.75rem}@media (max-width: 991.98px){#overview-table{font-size:0.875rem}#overview-table thead .h4{font-size:1.125rem}}#use_case_companies_list #threezy .biz-logo{max-height:40px;content:url("../img/uses/modallogos/threezy.png")}html.light .cryptum{content:url(../img/uses/lightmode/cryptum.jpg) !important;height:58px;max-width:max-content;width:184px;max-height:none;margin:0px;padding-bottom:10px}.xrp-ledger{content:url(../img/uses/modallogos/xrp-ledger.png)}html.light .xrp-ledger{content:url(../img/uses/lightmode/xrp-ledger.png)}.gatehub{content:url(../img/uses/modallogos/gatehub.png)}html.light .gatehub{content:url(../img/uses/lightmode/gatehub.png)}.towolabs{content:url(../img/uses/modallogos/towolabs.png)}html.light .towolabs{content:url(../img/uses/lightmode/towolabs.png)}.xrpscan{content:url(../img/uses/modallogos/xrpscan.png)}html.light .xrpscan{content:url(../img/uses/lightmode/xrpscan.png)}.xrp-toolkit{content:url(../img/uses/modallogos/xrp-toolkit.png)}html.light .xrp-toolkit{content:url(../img/uses/lightmode/xrp-toolkit.png)}.bithomp{content:url(../img/uses/modallogos/bithomp.png)}html.light .bithomp{content:url(../img/uses/lightmode/bithomp.png)}.onthedex{content:url(../img/uses/modallogos/onthedex.png)}html.light .onthedex{content:url(../img/uses/lightmode/onthedex.png)}.cryptum{content:url(../img/uses/modallogos/cryptum.png)}html.light .cryptum{content:url(../img/uses/lightmode/cryptum.png)}.evernode{content:url(../img/uses/modallogos/evernode.png)}html.light .evernode{content:url(../img/uses/lightmode/evernode.png)}.threezy{content:url(../img/uses/modallogos/threezy.png)}html.light .threezy{content:url(../img/uses/lightmode/threezy.png)}.tokenize{content:url(../img/uses/modallogos/tokenize.png)}html.light .tokenize{content:url(../img/uses/lightmode/tokenize.png)}.multichain{content:url(../img/uses/modallogos/multichain.png)}html.light .multichain{content:url(../img/uses/lightmode/multichain.png)}.crossmark{content:url(../img/uses/modallogos/crossmark.png)}html.light .crossmark{content:url(../img/uses/lightmode/crossmark.png)}.edge{content:url(../img/uses/modallogos/edge.png)}html.light .edge{content:url(../img/uses/lightmode/edge.png)}.gem-wallet{content:url(../img/uses/modallogos/gem-wallet.png)}html.light .gem-wallet{content:url(../img/uses/lightmode/gem-wallet.png)}.xumm{content:url(../img/uses/modallogos/xumm.png)}html.light .xumm{content:url(../img/uses/lightmode/xumm.png)}.aesthetes{content:url(../img/uses/modallogos/aesthetes.png)}html.light .aesthetes{content:url(../img/uses/lightmode/aesthetes.png)}.audiotarky{content:url(../img/uses/modallogos/audiotarky.png)}html.light .audiotarky{content:url(../img/uses/lightmode/audiotarky.png)}.nftmaster{content:url(../img/uses/modallogos/nftmaster.png)}html.light .nftmaster{content:url(../img/uses/lightmode/nftmaster.png)}.peerkat{content:url(../img/uses/modallogos/peerkat.png)}html.light .peerkat{content:url(../img/uses/lightmode/peerkat.png)}.sologenic_dex{content:url(../img/uses/modallogos/sologenic_dex.png)}html.light .sologenic_dex{content:url(../img/uses/lightmode/sologenic_dex.png)}.xrp-cafe{content:url(../img/uses/modallogos/xrp-cafe.png)}html.light .xrp-cafe{content:url(../img/uses/lightmode/xrp-cafe.png)}.xrp-oval{content:url(../img/uses/modallogos/xrp-oval.png)}html.light .xrp-oval{content:url(../img/uses/lightmode/xrp-oval.png)}.sologenic_dex{content:url(../img/uses/modallogos/sologenic_dex.png)}html.light .sologenic_dex{content:url(../img/uses/lightmode/sologenic_dex.png)}.xpmarket{content:url(../img/uses/modallogos/xpmarket.png)}html.light .xpmarket{content:url(../img/uses/lightmode/xpmarket.png)}.forte{content:url(../img/uses/modallogos/forte.png)}html.light .forte{content:url(../img/uses/lightmode/forte.png)}.ledger-city{content:url(../img/uses/modallogos/ledger-city.png)}html.light .ledger-city{content:url(../img/uses/lightmode/ledger-city.png)}.anchain{content:url(../img/uses/modallogos/anchain.png)}html.light .anchain{content:url(../img/uses/lightmode/anchain.png)}.ripple{content:url(../img/uses/modallogos/ripple.png)}html.light .ripple{content:url(../img/uses/lightmode/ripple.png)}.supermojo{content:url(../img/uses/modallogos/supermojo.png)}html.light .supermojo{content:url(../img/uses/lightmode/supermojo.png)}.ripple{content:url(../img/uses/modallogos/ripple.png)}html.light .ripple{content:url(../img/uses/lightmode/ripple.png)}.carbonland-trust{content:url(../img/uses/modallogos/carbonland-trust.png)}html.light .carbonland-trust{content:url(../img/uses/lightmode/carbonland-trust.png)}.gatehub{content:url(../img/uses/modallogos/gatehub.png)}html.light .gatehub{content:url(../img/uses/lightmode/gatehub.png)}.bitgo{content:url(../img/uses/modallogos/bitgo.png)}html.light .bitgo{content:url(../img/uses/lightmode/bitgo.png)}.arrow-button.left-arrow img{content:url(../img/uses/left-arrow.svg)}.arrow-button.right-arrow img{content:url(../img/uses/right-arrow.svg)}.html.light .arrow-button.left-arrow img{content:url(../img/uses/left-arrow-light.svg)}.html.light .arrow-button.right-arrow img{content:url(../img/uses/right-arrow-light.svg)}.related-tasks-links a{color:#454549;text-decoration:none}.related-tasks-links a:hover{color:#000}.use-case-external-link{border:1px solid #C1C1C2}.content .use-case-external-link a{text-decoration:none;color:#000}.use-case-step-num{margin-top:64px;margin-bottom:24px;color:#eae7e6;font-size:5.16em;font-weight:400;font-family:"Space Mono", sans-serif}.use-case-step-length{float:right;color:#888;font-size:1rem}.arrows-container{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);display:flex;justify-content:space-between;z-index:10}@media only screen and (max-width: 768px){.arrows-container{top:30px}}.arrow-button{background-color:transparent;border:none;cursor:pointer}.arrow-button img{width:40px;height:40px}.left-arrow{margin-left:40px}@media only screen and (max-width: 768px){.left-arrow{margin-left:0px}}.right-arrow{margin-right:40px}@media only screen and (max-width: 768px){.right-arrow{margin-right:0px}}.modal-uses{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(0,0,0,0.4)}.modal-content-uses{position:relative;background-color:#232325;position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);padding:20px;width:60% !important;height:60%;display:flex;flex-direction:column;align-items:center;overflow:scroll}.modal-content-uses::before{content:"";position:absolute;top:0;left:0;width:100%;height:1px;background:linear-gradient(90deg, #b480ff -.32%, #5f00e6 32.7%, #1aa4ff 61.53%, #19ff83 100.32%, #19ff83 100.32%)}.content-section{width:100%;display:flex;justify-content:center;align-items:center;margin-bottom:20px}.section-image{display:block}.section-text-title{font-family:"Work Sans";font-style:normal;font-weight:500;font-size:24px;line-height:32px;text-align:center;color:#ffffff}.section-text-description{max-width:320px;font-family:"Work Sans";font-style:normal;font-weight:400;font-size:16px;line-height:24px;text-align:center;color:#c1c1c2}.apps-built{position:relative;top:17px;left:50px;font-family:"Work Sans";font-style:normal;font-weight:600;font-size:12px;line-height:16px;color:#e0e0e1}.numbers-animation{width:218px;height:96px}.arrow-animation{position:relative;right:23px;top:-11px;width:60px !important}.explore-projects{font-family:"Work Sans";font-style:normal;font-weight:600;font-size:12px;line-height:16px;color:#7919ff;position:relative;top:-9px;right:27px}.section-separator{width:50%;border:0;border-top:1px solid #ccc}.threezy-logo{margin:4px;max-height:38px}.blockforce-logo{margin:0px !important;max-height:45px !important}.Evernode-logo{margin-right:39px}.logo-grid{display:grid;grid-template-rows:repeat(2, 1fr);grid-template-columns:repeat(4, 1fr);grid-gap:8px;justify-items:center}.flex-center{display:flex;justify-content:center}.top-row,.bottom-row{display:flex;justify-content:center}@media only screen and (max-width: 768px){.top-row,.bottom-row{flex-wrap:wrap}}.logo-item{max-height:30px;max-width:130px;margin:10px 11px}.close{color:#aaaaaa;float:right;font-size:28px;font-weight:bold;cursor:pointer}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer}.use-case-circle{display:flex;align-items:center;justify-content:center;aspect-ratio:1 / 1;border:1px solid #343437;border-radius:50%;margin-bottom:30px;cursor:pointer}@media (min-width: 768px){.use-case-circle{aspect-ratio:1 / 1;min-width:200px !important;min-height:200px !important}}@media (min-width: 992px){.use-case-circle{aspect-ratio:1 / 1;min-width:250px !important;min-height:250px !important}}.use-case-circle:hover{border-color:#838386}.circle-content{display:flex;flex-direction:column;align-items:center;gap:13px}.circle-img{width:40px;height:40px}.circle-text{font-family:"Work Sans";font-style:normal;font-weight:700;white-space:nowrap;font-size:16px;margin-bottom:0px}.join-xrpl-section{display:flex;flex-direction:column;align-items:center}.colorful-join-text-wrapper{display:flex;justify-content:center;flex-direction:column;padding:0 5%;box-sizing:border-box}@media (min-width: 992px){.colorful-join-text-wrapper{padding:0 4%}}.colorful-join-text{display:block;width:100%;text-align:left;font-family:"Work Sans";font-style:normal;font-weight:400;font-size:32px;line-height:38px;background:linear-gradient(90deg, #feff01 0%, #ff2d9a 30.82%, #e24cff 64.01%, #9a52ff 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}#numbersAnimation{display:block}#numbersAnimationLight{display:none}html.light .section-separator{background:#C1C1C2}html.light .section-text-description{color:#343437}html.light .modal-content-uses{background:#ffffff}html.light #numbersAnimation{display:none}html.light #numbersAnimationLight{display:block}html.light .apps-built{position:relative;top:17px;left:50px;font-family:"Work Sans";font-style:normal;font-weight:600;font-size:12px;line-height:16px;color:#232325}html.light .colorful-join-text{display:block;width:100%;text-align:left;font-family:"Work Sans";font-style:normal;font-weight:400;font-size:32px;line-height:38px;background:linear-gradient(90deg, #b480ff -.32%, #5f00e6 32.7%, #1aa4ff 61.53%, #19ff83 100.32%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}@media (min-width: 992px){html.light .colorful-join-text{width:750px}}@media (min-width: 992px){.colorful-join-text{width:750px}}.pill-box{display:inline-flex;align-items:center;justify-content:center;padding:3.69087px 29.527px;width:73.05px;height:37.38px;background:#7919ff;border:3.69087px solid #5f00e5;border-radius:184.543px}.pill-number{font-family:"Work Sans";font-style:normal;font-weight:600;font-size:22.1452px;color:#f0e5ff}.use-case-steps h2{margin-top:10px;margin-bottom:10px;font-size:1.728em;line-height:32px;font-weight:700}.use-case-steps h2 a{text-decoration:none}.use-case-steps h2:first-of-type:before{display:none}.use-case h1{font-size:2.4em;padding-bottom:10px}.use-case-steps h2:before{margin-top:-30px;height:0}.use-case-steps h2:first-of-type{margin-top:-30px}.related-tasks-links ul{list-style-type:none;padding-left:0}.related-tasks-links ul li{margin:0px;padding-top:2px}.related-tasks-links a:hover::after{padding-left:0.5em}.related-tasks-links a::after{content:" ➝";padding-left:0;transition:all 0.2s ease-in-out}.github-edit-wrap .github-edit{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");background-size:24px 24px;background-position:left 12px center;background-repeat:no-repeat;padding-left:48px;text-decoration:none;margin-bottom:1rem;margin-top:0}.top-nav{background-color:#111112;height:80px;padding:0}.top-nav .navbar-brand{text-decoration:none;white-space:pre;-webkit-transition:opacity 0.2s ease, color 0.2s ease;transition:opacity 0.2s ease, color 0.2s ease;padding-left:2rem}.top-nav .navbar-brand .logo{margin-left:0;content:url(../img/XRPLedger_DevPortal-white.svg);width:162px;height:40px;display:block}.top-nav .navbar-brand:hover{opacity:0.75}@media (max-width: 991.98px){.top-nav .navbar-brand{padding-left:2rem}.top-nav .navbar-brand img{width:120px}}.top-nav .nav-item{font-weight:600}@media (min-width: 992px){.top-nav #topnav-pages{flex-grow:1}}.top-nav #topnav-pages .nav-link{color:#F5F5F7;font-size:1rem;line-height:1.25rem;text-decoration:none;font-weight:600}.top-nav .dropdown-toggle{position:relative}.top-nav .dropdown-menu{border-width:0}.top-nav .dropdown-menu h5{font-weight:400;font-size:12px;color:#A2A2A4;margin-bottom:0}.top-nav .dropdown-menu .dropdown-item{line-height:1rem;padding:0.75rem 0;white-space:normal}.top-nav .dropdown-menu .dropdown-item.dropdown-hero{width:100%;display:flex;padding:1rem 2rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero>img{width:68px;height:68px;background-color:#232325;border-radius:4px;flex-grow:0;padding:0.75rem;margin-right:2rem;margin-top:auto;margin-bottom:auto}.top-nav .dropdown-menu .dropdown-item.dropdown-hero p{font-size:14px;color:#C1C1C2;margin:0;white-space:normal}.top-nav .dropdown-menu .dropdown-item.dropdown-hero h4{font-size:1.25rem;font-weight:600;margin-bottom:0;line-height:2rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero:hover h4{color:#9A52FF}.top-nav .dropdown-menu .dropdown-item.dropdown-hero:hover p{font-weight:400}.top-nav .dropdown-menu .dropdown-item:last-child{padding-bottom:0}.top-nav .dropdown-menu .dropdown-item:first-child{padding-top:0}.top-nav .dropdown-menu .col-for-popular-pages,.top-nav .dropdown-menu .col-for-人気ページ{background-color:#232325}.top-nav .dropdown-menu a:hover{color:#9A52FF;background-color:inherit}.top-nav .dropdown-menu h5:hover{background-color:inherit}.top-nav #topnav-search{flex-grow:1}.top-nav #topnav-search .input-group{flex-grow:1;flex-wrap:nowrap}@media (max-width: 991.98px){.top-nav #topnav-search .form-inline{padding:1rem 2rem}}.top-nav #topnav-search .input-group-text{height:40px}.top-nav #topnav-search .ds-input{height:40px}.top-nav #topnav-language .dropdown-item{font-weight:600}@media (min-width: 992px){.top-nav{padding:0 2rem}.top-nav .navbar-brand{margin-left:0;padding-left:0}.top-nav .dropdown-toggle::after{display:none}.top-nav .dropdown-toggle>span{border-bottom:2px solid transparent}.top-nav .dropdown .dropdown-toggle:hover>span:not(.chevron){padding-bottom:8px;border-bottom:2px solid #9A52FF;margin-bottom:-8px}.top-nav .dropdown-menu{border-radius:0 0 8px 8px;padding:2.5rem}.top-nav .dropdown-menu .dropdown-item.dropdown-hero{padding:0}.top-nav .dropdown-menu.show{display:grid;gap:40px}.top-nav .dropdown-menu.show#topnav_dd_xrp-ledger-overviewhtml{grid-template-columns:180px 180px 180px}.top-nav .dropdown-menu.show#topnav_dd_docshtml{grid-template-columns:180px 180px 260px;left:-200px}.top-nav .dropdown-menu.show#topnav_dd_contributehtml{grid-template-columns:200px}.top-nav .dropdown-menu.show#topnav_dd_resourceshtml{grid-template-columns:195px 180px 180px;left:-200px}.top-nav .dropdown-menu.show .dropdown-hero{grid-row:1;grid-column:1 / 4}.top-nav .dropdown-menu.show #dropdown-hero-for-documentation,.top-nav .dropdown-menu.show #dropdown-hero-for-ドキュメント{grid-column:1 / 3}.top-nav .dropdown-menu.show .col-for-xrp-ledger{grid-row:1 / 3;grid-column:1}.top-nav .dropdown-menu.show .col-for-xrp{grid-column:2}.top-nav .dropdown-menu.show .col-for-sustainability,.top-nav .dropdown-menu.show .col-for-持続可能性{grid-column:2}.top-nav .dropdown-menu.show .col-for-about,.top-nav .dropdown-menu.show .col-for-概要{grid-row:1 / 3;grid-column:3}.top-nav .dropdown-menu.show .col-for-article-types,.top-nav .dropdown-menu.show .col-for-カテゴリ{grid-column:1;grid-row:2}.top-nav .dropdown-menu.show .col-for-get-started,.top-nav .dropdown-menu.show .col-for-始めましょう{grid-column:2;grid-row:2 / 4}.top-nav .dropdown-menu.show .col-for-popular-pages,.top-nav .dropdown-menu.show .col-for-人気ページ{grid-column:3;grid-row:1 / 4;margin:-40px -40px -40px 0;padding:40px}.top-nav .dropdown-menu.show .col-for-development,.top-nav .dropdown-menu.show .col-for-開発{grid-column:1}.top-nav .dropdown-menu.show .col-for-current-status,.top-nav .dropdown-menu.show .col-for-現在のステータス{grid-column:2}.top-nav .dropdown-menu.show .col-for-join-in,.top-nav .dropdown-menu.show .col-for-参加する{grid-column:3}.top-nav .dropdown-menu.smaller-dropdown{min-width:180px;padding:1.25rem}.top-nav #topnav-pages{flex-grow:0}}@media (min-width: 992px) and (min-width: 992px) and (max-width: 1133px){.top-nav #topnav-pages .nav-link{padding:1rem 1rem}}@media (min-width: 992px){.top-nav #topnav-language{flex-grow:0}.top-nav #topnav-language hr{display:none}.top-nav #topnav-language #language_selector_header_btn{padding-right:0}}@media (min-width: 992px) and (min-width: 992px) and (max-width: 1133px){.top-nav #topnav-language #language_selector_header_btn{padding-left:1rem}}@media (min-width: 992px) and (min-width: 1200px){.top-nav #topnav-search{margin-left:3.5rem;margin-right:0.5rem}}@media (max-width: 991.98px){.top-nav .navbar-toggler{border:0;padding:30px 2rem;font-size:1rem;display:inline-block}.top-nav .navbar-toggler .navbar-toggler-icon{background:none;height:20px;width:20px;position:relative}.top-nav .navbar-toggler .navbar-toggler-icon::after,.top-nav .navbar-toggler .navbar-toggler-icon::before,.top-nav .navbar-toggler .navbar-toggler-icon div{position:absolute;content:" ";background-color:#F5F5F7;display:block;width:100%;height:3px;transition:all 0.2s ease}.top-nav .navbar-toggler .navbar-toggler-icon::before{top:0}.top-nav .navbar-toggler .navbar-toggler-icon::after{bottom:0}.top-nav .navbar-toggler .navbar-toggler-icon div{top:calc(50% - 1.5px)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon::before{transform:translateY(8px) rotate(135deg)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon::after{transform:translateY(-9px) rotate(-135deg)}.top-nav .navbar-toggler:not(.collapsed) .navbar-toggler-icon div{transform:scale(0)}.top-nav .navbar-nav .nav-link,.top-nav .navbar-collapse>.nav-item{line-height:150%;background:#111112}.top-nav .navbar-nav .nav-link label,.top-nav .navbar-collapse>.nav-item label{margin-bottom:0}.top-nav .navbar-nav .nav-link{padding:1rem 2rem}.top-nav .dropdown-menu{margin:0;width:100%;overflow:auto;transition:all 0.2s ease;height:0;display:block;padding:0;border-radius:0}.top-nav .dropdown-menu.show{height:calc(100vh - 80px - 52px)}.top-nav .dropdown-menu.show>:last-child{padding-bottom:4rem}.top-nav .dropdown-menu.show#topnav_dd_docshtml{display:grid;grid-template-columns:minmax(187px, 1fr) minmax(187px, 1fr);gap:1px;left:-200px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .dropdown-hero{grid-column:1 / 3;grid-row:1}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-article-types,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-カテゴリ{grid-column:1;grid-row:2}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-get-started,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-始めましょう{grid-column:2;grid-row:2 / 4;padding-bottom:32px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-popular-pages,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-人気ページ{grid-column:1 / 3;grid-row:4;margin:-1px;padding-top:33px}.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-questions,.top-nav .dropdown-menu.show#topnav_dd_docshtml .col-for-質問{grid-column:1 / 3;grid-row:5;margin:-1px;padding-bottom:32px}.top-nav .dropdown-menu .navcol{padding:1rem 2rem}.top-nav .dropdown-menu.smaller-dropdown{padding:0 2rem}.top-nav .dropdown-menu.smaller-dropdown.show{padding:1rem 2rem;height:auto}.top-nav .dropdown-menu .dropdown-hero:first-child{padding-top:1rem}.top-nav .dropdown-toggle:not(.with-caret)::before,.top-nav .dropdown-toggle:not(.with-caret)::after{border:0;font-family:FontAwesome;color:#9A52FF;font-size:0.75rem;transition:all 0.2s ease;overflow:clip;width:1rem}.top-nav .dropdown-toggle:not(.with-caret)::before{content:"\f053";display:inline-block;margin-bottom:-5px}.top-nav .dropdown-toggle:not(.with-caret)::after{content:"\f054";position:absolute;right:2rem}.top-nav .dropdown.show .dropdown-toggle::after{text-indent:5rem}.top-nav .dropdown:not(.show) .dropdown-toggle::before{width:0;height:0;text-indent:-5rem}.top-nav .dropdown-toggle.with-caret::after{border:0}.top-nav #top-main-nav{padding-top:72px;position:relative;transition:padding-top 0.2s ease}.top-nav #top-main-nav.submenu-expanded{padding-top:0}.top-nav #top-main-nav.submenu-expanded .dropdown:not(.show) .dropdown-toggle{display:none}.top-nav #top-main-nav.submenu-expanded #topnav-search{height:0;overflow:clip;padding-top:0;padding-bottom:0}.top-nav #topnav-search{position:absolute;top:0;width:100%;height:72px;transition:all 0.2s ease}.top-nav #topnav-search .input-group{flex-wrap:nowrap}.top-nav #topnav-language hr{border-top:1px solid #232325;margin-top:0.25rem;margin-bottom:0.25rem;display:static}}.top-nav #top-nav-hero-docs{content:url("../img/icons/docs.svg")}.top-nav #top-nav-hero-contribute{content:url("../img/icons/contribute.svg")}.main h1:before,.main h2:before,.main h3:before,.main h4:before,.main h5:before,.main h6:before,.interactive-block:before{display:block;content:" ";margin-top:-80px;height:80px;visibility:hidden}a{z-index:1}.chevron{position:relative;display:inline-block;width:0.75rem;height:0.5625rem}.chevron span{position:absolute;top:0.25rem;display:inline-block;width:0.5rem;height:0.15rem;background-color:#9A52FF;transition:all 0.2s ease;border:none}.chevron:not(.expander) span:first-of-type{left:0;transform:rotate(45deg)}.chevron:not(.expander) span:last-of-type{right:0;transform:rotate(-45deg)}.chevron.active span:first-of-type{transform:rotate(-45deg)}.chevron.active span:first-of-type{transform:rotate(45deg)}.dropdown.show .chevron span:first-of-type,.expander:not(.collapsed) .chevron span:first-of-type{transform:rotate(-45deg)}.dropdown.show .chevron span:last-of-type,.expander:not(.collapsed) .chevron span:last-of-type{transform:rotate(45deg)}.custom-theme-toggle .custom-control-label{padding:1rem;cursor:pointer}.custom-theme-toggle .custom-control-label::before,.custom-theme-toggle .custom-control-input:checked ~ .custom-control-label::before{position:static;display:inline-block;content:" ";cursor:pointer;border:0;background-image:url("../img/sun-moon.svg");background-size:3rem;background-color:transparent;transform-origin:center;margin-left:-0.5rem;margin-right:0.5rem;transition:transform 0.4s ease, background-position 0.4s ease;transform:rotate(15deg);background-position:top left}.custom-theme-toggle .custom-control-label::after{display:none}@media (max-width: 991.98px){.navbar-collapse,.dropdown-menu{box-shadow:0px 25px 40px -20px #000}}.content{padding-bottom:50px}.content p code,.content table code,.content li>code{background-color:#0A2E1B;color:#5BEB9D}.content a{text-decoration:underline}.content h1{font-size:3rem;margin-top:32px;line-height:1.2;font-weight:700}.content h1:first-child{margin-top:0;line-height:1.2}.content h1:first-child::before{margin-top:-80px}.content h2{margin-top:2.5rem;margin-bottom:1.5rem;font-size:2.5rem;font-weight:600;line-height:1.2}.content h3{font-size:2.125rem;margin-top:2rem;margin-bottom:1rem;line-height:1.2}.content h4{font-size:1.75rem;margin-top:1.5rem;margin-bottom:0.5rem;line-height:1.2}.content h5{font-size:1.25rem;margin-top:1.25rem;line-height:1.2;font-weight:700}.content h6{font-size:1rem;margin-top:1rem;line-height:1.2;font-weight:700}.content li{margin:6px;margin-top:24px}.content li p{margin:0}.content a[title="Source"]{float:right;padding-left:20px}.content h1.invisible,.content h2.invisible,.content h3.invisible,.content h4.invisible,.content h5.invisible,.content h6.invisible{font-size:0;line-height:0;margin:0}.content h1.invisible .hover_anchor,.content h2.invisible .hover_anchor,.content h3.invisible .hover_anchor,.content h4.invisible .hover_anchor,.content h5.invisible .hover_anchor,.content h6.invisible .hover_anchor{display:none}.blurb a{text-decoration:underline}.hover_anchor{visibility:hidden;padding-left:1rem;font-size:1.25rem}h1:hover .hover_anchor,h2:hover .hover_anchor,h3:hover .hover_anchor,h4:hover .hover_anchor,h5:hover .hover_anchor,h6:hover .hover_anchor{visibility:visible;text-decoration:none}pre{color:#fff;background-color:#232325;word-wrap:normal;padding:2rem;border-radius:4px}pre code{white-space:pre;color:#fff;background-color:#232325}.multicode{padding:0;z-index:1;position:relative}.multicode pre{background:none;border:none;border-radius:0;padding:0;clear:both}.multicode pre code{overflow:auto;max-height:24em;border-radius:0 4px 4px 4px;display:block;padding:2rem}.multicode pre code.expanded{overflow:visible;max-height:none;position:absolute;min-width:100%}.multicode ul{margin:0 !important;padding:0}.multicode ul li{display:block;float:left;list-style-type:none;margin-right:0px;margin-left:0px;border:0;clear:none}.multicode a{text-decoration:none;color:#fff;background-color:transparent;padding:.75rem 2rem;margin:0;border-radius:4px 4px 0 0}.multicode a.current{background-color:#232325}.multicode a:hover{text-decoration:none;background-color:#232325;color:#9A52FF;padding-bottom:0.625rem}.multicode .btn{z-index:10}.multicode .codetabs{position:relative;z-index:10}.clipboard-btn{z-index:10;margin-right:10px}.codehilite{background:#232325;color:#fff}.codehilite .c,.codehilite .ch,.codehilite .cm,.codehilite .cp,.codehilite .cpf,.codehilite .c1,.codehilite .cs{color:#838386}.codehilite .k,.codehilite .kc,.codehilite .kd,.codehilite .kn,.codehilite .kp,.codehilite .kr,.codehilite .kt{color:#FF6719}.codehilite .m,.codehilite .mb,.codehilite .mh,.codehilite .mi,.codehilite .mo,.codehilite .il{color:#19A3FF}.codehilite .n,.codehilite .na,.codehilite .nb,.codehilite .nc,.codehilite .nd,.codehilite .ne,.codehilite .nf,.codehilite .ni,.codehilite .nl,.codehilite .nn,.codehilite .nt,.codehilite .nv,.codehilite .nx,.codehilite .bp,.codehilite .fm,.codehilite .py{color:#fff}.codehilite .p{color:#E0E0E1}.codehilite .s,.codehilite .s1,.codehilite .s2,.codehilite .sa,.codehilite .sb,.codehilite .sc,.codehilite .dl,.codehilite .sd,.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sr,.codehilite .ss,.codehilite .sx{color:#28B86A}.codehilite{background:transparent;position:relative}.codehilite .btn-group{top:1rem;right:1rem;position:absolute}.multicode .codehilite .btn-group{top:70px;right:20px}.CodeMirror{font-family:"Space Mono",monospace;height:300px;background-color:#232325;margin:16px 0;border-radius:4px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:2rem 0}.CodeMirror pre{padding:0 2rem 0 1rem}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#000}.CodeMirror-gutters{background-color:#232325;white-space:nowrap}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #fff;z-index:3}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid #838386}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#838386;z-index:1}.cm-tab{display:inline-block}.cm-s-default .cm-keyword{color:#FF6719}.cm-s-default .cm-atom{color:#FF6719}.cm-s-default .cm-number{color:#19A3FF}.cm-s-default .cm-def{color:#19A3FF}.cm-s-default .cm-variable{color:#fff}.cm-s-default .cm-variable-2{color:#fff}.cm-s-default .cm-variable-3{color:#fff}.cm-s-default .cm-property{color:#fff}.cm-s-default .cm-operator{color:#fff}.cm-s-default .cm-comment{color:#838386}.cm-s-default .cm-string{color:#28B86A}.cm-s-default .cm-string-2{color:#28B86A}.cm-s-default .cm-meta{color:#838386}.cm-s-default .cm-qualifier{color:#838386}.cm-s-default .cm-builtin{color:#28B86A}.cm-s-default .cm-bracket{color:#fff}.cm-s-default .cm-tag{color:#fff}.cm-s-default .cm-attribute{color:#fff}.cm-s-default .cm-header{color:#19A3FF}.cm-s-default .cm-quote{color:#28B86A}.cm-s-default .cm-hr{color:#838386}.cm-s-default .cm-link{color:#B2E0FF}.cm-negative{color:#fff}.cm-positive{color:#fff}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-s-default .cm-error{color:#FF198B}.cm-invalidchar{color:#FF198B}div.CodeMirror span.CodeMirror-matchingbracket{color:#7919FF}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#FAFF19}.CodeMirror-activeline-background{background:#232325}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#232325;color:#fff}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;padding-right:30px;height:100%;outline:none;position:relative;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-sizer{position:relative}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;-moz-box-sizing:content-box;box-sizing:content-box;padding-bottom:30px;margin-bottom:-32px;display:inline-block;*zoom:1;*display:inline}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-code pre{border-right:30px solid transparent;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.CodeMirror-wrap .CodeMirror-code pre{border-right:none;width:auto}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-right:none;width:0}.CodeMirror-focused div.CodeMirror-cursor{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,0.4)}.CodeMirror span{*vertical-align:text-bottom}@media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid black;border-radius:4px 4px 4px 4px;color:black;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")}.CodeMirror-lint-mark-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=")}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-multiple{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.content img{max-width:100%;height:auto}.content img .dactyl_badge{width:initial}.content svg{max-width:100%}.content .floating-diagram{margin:0.5rem;float:left}.content li{clear:left}html:not(.light) .content svg[fill="black"]{fill:#fff;stroke:#fff}html:not(.light) .content svg[fill="black"] *[fill="white"]{fill:#000}html:not(.light) .content svg[fill="black"] *[stroke="white"]{stroke:#000}html:not(.light) .content svg[fill="black"] *[fill="black"]{fill:#fff}html:not(.light) .content svg[fill="black"] *[stroke="black"]{stroke:#fff}html:not(.light) .content svg[fill="black"] g[fill="blue"]{fill:#19A3FF}html:not(.light) .content svg[fill="black"] g[stroke="blue"]{stroke:#19A3FF}html:not(.light) .content svg[fill="black"] g[fill="rgb(120,120,120)"]{fill:#E0E0E1}html:not(.light) .content svg[fill="black"] g[stroke="rgb(120,120,120)"]{stroke:#E0E0E1}html:not(.light) .content svg[fill="black"] g[fill="rgb(200,200,200)"]{fill:#343437}html:not(.light) .content svg[fill="black"] g[fill="rgb(70,70,70)"]{fill:#838386}html:not(.light) .content svg[fill="black"] g[stroke="rgb(70,70,70)"]{stroke:#838386}html:not(.light) .content svg[fill="black"] g[fill="rgb(29,180,255)"]{fill:#9A52FF}html:not(.light) .content svg[fill="black"] g[stroke="rgb(29,180,255)"]{stroke:#9A52FF}html:not(.light) .content svg[fill="black"] rect[stroke="rgb(245,247,249)"]{stroke:#000}html:not(.light) .content svg[fill="black"] g[fill="lime"],html:not(.light) .content svg[fill="black"] g[fill="rgb(0,255,0)"]{fill:#9A52FF}html:not(.light) .content svg[fill="black"] g[stroke="lime"],html:not(.light) .content svg[fill="black"] g[stroke="rgb(0,255,0)"]{stroke:#9A52FF}html:not(.light) .content svg[fill="black"] g[fill="yellow"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FAFF19}html:not(.light) .content svg[fill="black"] g[fill="yellow"] path[stroke="black"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"] path[stroke="black"]{stroke:#000}html:not(.light) .content svg[fill="black"] g[fill="red"],html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FF198B}html:not(.light) .content svg[fill="black"] g[stroke="red"],html:not(.light) .content svg[fill="black"] g[stroke="rgb(255,255,0)"]{stroke:#FF198B}html:not(.light) .content svg[fill="black"] g[fill="yellow"]+g text,html:not(.light) .content svg[fill="black"] g[fill="rgb(255,255,0)"]+g text{fill:#000}html:not(.light) .content svg[fill="black"] g[fill="lime"]+g text{fill:#000}html:not(.light) .content svg[fill="none"] path[fill="#000000"]{fill:#fff}html:not(.light) .content svg[fill="none"] path[stroke="#000000"]{stroke:#fff}html:not(.light) .content svg[fill="none"] path[fill="#ffffff"]{fill:#000}html:not(.light) .content svg[fill="none"] path[stroke="#ffffff"]{stroke:#000}html:not(.light) .content svg[fill="none"] path[fill="#23292f"],html:not(.light) .content svg[fill="none"] path[fill="#23282f"]{fill:#fff}html:not(.light) .content svg[fill="none"] path[stroke="#23292f"],html:not(.light) .content svg[fill="none"] path[stroke="#23282f"]{stroke:#fff}html:not(.light) .content svg[fill="none"] path[fill="#2c3e50"],html:not(.light) .content svg[fill="none"] path[fill="#2b3e51"]{fill:#E0E0E1}html:not(.light) .content svg[fill="none"] path[stroke="#2c3e50"],html:not(.light) .content svg[fill="none"] path[stroke="#2b3e51"]{stroke:#E0E0E1}html:not(.light) .content svg[fill="none"] path[fill="#1c2835"]{fill:#F5F5F7}html:not(.light) .content svg[fill="none"] path[stroke="#1c2835"]{stroke:#F5F5F7}html:not(.light) .content svg[fill="none"] path[fill="#21aa47"]{fill:#32E685}html:not(.light) .content svg[fill="none"] path[stroke="#21aa47"]{stroke:#32E685}html:not(.light) .content svg[fill="none"] path[fill="#e64b3b"]{fill:#dc3545}html:not(.light) .content svg[fill="none"] path[stroke="#e64b3b"]{stroke:#dc3545}html:not(.light) .content svg[fill="none"] path[stroke="#27a2db"],html:not(.light) .content svg[fill="none"] path[stroke="#00aae4"]{stroke:#9A52FF}html:not(.light) .content svg[fill="none"] path[fill="#27a2db"],html:not(.light) .content svg[fill="none"] path[fill="#00aae4"]{fill:#9A52FF}html:not(.light) .content svg[fill="none"] path[fill="#e6e7e8"]{fill:#232325}html:not(.light) .content svg[fill="none"] path[stroke="#e6e7e8"]{stroke:#232325}html:not(.light) .content svg[fill="none"] path[stroke="#ffbf27"]{stroke:#D919FF}html:not(.light) .content svg[fill="none"] path[fill="#00ff00"]{fill:#32E685}html:not(.light) .content svg[fill="none"] path[stroke="#00ff00"]{stroke:#32E685}html:not(.light) .content svg[fill="none"] path[fill="#ff00ff"]{fill:#FF198B}html:not(.light) .content svg[fill="none"] path[stroke="#ff00ff"]{stroke:#FF198B}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#ffffff"]{stop-color:#343437}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#e6e7e8"]{stop-color:#232325}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#dbdcdd"]{stop-color:#000}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#b1b3b5"]{stop-color:#111112}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#29a1da"]{stop-color:#2DCF78}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#2789b9"]{stop-color:#5BEB9D}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#6bc1ec"]{stop-color:#ADF5CE}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#8ad6f4"]{stop-color:#84F0B6}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#fab913"]{stop-color:#F2B2FF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#fad26b"]{stop-color:#EA80FF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#f8a136"]{stop-color:#E24CFF}html:not(.light) .content svg[fill="none"] linearGradient stop[stop-color="#f7931a"]{stop-color:#C000E5}html.light svg[fill="black"] g[fill="blue"]{fill:#006BB2}html.light svg[fill="black"] g[stroke="blue"]{stroke:#19A3FF}html.light svg[fill="black"] g[fill="rgb(120,120,120)"]{fill:#343437}html.light svg[fill="black"] g[stroke="rgb(120,120,120)"]{stroke:#343437}html.light svg[fill="black"] g[fill="rgb(200,200,200)"]{fill:#A2A2A4}html.light svg[fill="black"] g[fill="rgb(70,70,70)"]{fill:#343437}html.light svg[fill="black"] g[stroke="rgb(70,70,70)"]{stroke:#343437}html.light svg[fill="black"] g[fill="rgb(29,180,255)"]{fill:#19A3FF}html.light svg[fill="black"] g[stroke="rgb(29,180,255)"]{stroke:#006BB2}html.light svg[fill="black"] rect[stroke="rgb(245,247,249)"]{stroke:#FCFCFD}html.light svg[fill="black"] g[fill="lime"],html.light svg[fill="black"] g[fill="rgb(0,255,0)"]{fill:#5BEB9D}html.light svg[fill="black"] g[stroke="lime"],html.light svg[fill="black"] g[stroke="rgb(0,255,0)"]{stroke:#28B86A}html.light svg[fill="black"] g[fill="yellow"],html.light svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FCFF80}html.light svg[fill="black"] g[fill="red"],html.light svg[fill="black"] g[fill="rgb(255,255,0)"]{fill:#FF4BA4}html.light svg[fill="black"] g[stroke="red"],html.light svg[fill="black"] g[stroke="rgb(255,255,0)"]{stroke:#FF198B}html.light svg[fill="none"] rect[fill="#111112"]{fill:#F5F5F7}html.light svg[fill="none"] path[fill="white"]{fill:#000}html.light svg[fill="none"] path[fill="#343437"]{fill:#C1C1C2}html.light svg[fill="none"] path[fill="#A2A2A4"],html.light svg[fill="none"] rect[fill="#A2A2A4"],html.light svg[fill="none"] ellipse[fill="#A2A2A4"]{fill:#454549}html.light svg[fill="none"] path[fill="#232325"]{fill:#E0E0E1}html.light svg[fill="none"] path[fill="#F5F5F7"]{fill:#111112}html.light svg[fill="none"] path[stroke="#F5F5F7"]{stroke:#111112}html.light svg[fill="none"] path[stroke="#FF198B"]{stroke:#B20058}html.light svg[fill="none"] linearGradient stop[stop-color="#F5F5F7"]{stop-color:#111112}html.light svg[fill="none"] linearGradient stop[stop-color="#C1C1C2"]{stop-color:#343437}.external-link::after{content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:16px;padding:0 4px 0 8px;width:16px;height:16px;background-position:center;transition:transform 100ms ease-in-out}.external-link:hover::after{transform:translate(3px, -3px)}.external-link .fa-external-link{display:none}.top-nav .dropdown .external-link::after,.xrpl-footer .external-link::after{background-position:left 6px bottom 1px;width:2rem}@-moz-document url-prefix(){@supports (animation: calc(0s)){.top-nav .dropdown .external-link::after,.xrpl-footer .external-link::after{background-position:left 8px bottom 2px}}}.top-nav .dropdown .external-link:hover::after,.xrpl-footer .external-link:hover::after{background-position:left 8px bottom 3px}.q-wrapper .external-link::after{background-position:left 0 bottom 7px}.q-wrapper .external-link:hover::after{background-position:left 4px bottom 11px}.li-links{position:relative;border-bottom:2px solid #454549}.li-links a{width:100%;padding:16px 0}.li-links a::after{position:absolute;right:4px;content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:1.5rem;padding:0 .5rem;background-position:left 0 bottom -.1rem;transition:background-position 100ms ease-in-out}.li-links a:hover::after{background-position:left .2rem bottom .1rem}.xrpl-footer{padding:7.5rem 2rem}.xrpl-footer .footer-nav .nav-item{text-shadow:#111112 0px 0px 2px, #111112 1px 1px 2px, #111112 2px 2px 3px, #111112 2px 2px 4px, #111112 2px 2px 5px, #111112 2px 2px 6px, #111112 -1px -1px 2px, #111112 -2px -2px 3px, #111112 -2px -2px 4px}@media (min-width: 992px){.xrpl-footer{background-image:url(../img/backgrounds/footer.svg);background-size:cover;background-repeat:no-repeat;background-position:bottom right}}@media (max-width: 991.98px){.xrpl-footer .col-lg:not(:first-child){margin-top:4rem}}.xrpl-footer h5{font-size:1rem;font-weight:600;color:#A2A2A4}.xrpl-footer .nav-link{padding:.75rem 0;line-height:1}.xrpl-footer .absolute-bottom-footer{font-size:10px;line-height:1rem}@media (max-width: 991.98px){.xrpl-footer .absolute-bottom-footer .copyright-license{margin-top:3rem}}.devportal-callout.tip,.devportal-callout.ヒント{border-color:#32E685}.devportal-callout.tip>strong:first-child:before,.devportal-callout.ヒント>strong:first-child:before{color:#32E685}.devportal-callout.note>strong:first-child:before,.devportal-callout.注記>strong:first-child:before{color:#19A3FF}.devportal-callout.note,.devportal-callout.注記{border-color:#19A3FF}.devportal-callout.caution,.devportal-callout.注意{border-color:#FAFF19}.devportal-callout.caution>strong:first-child:before,.devportal-callout.注意>strong:first-child:before{color:#FAFF19}.devportal-callout.warning,.devportal-callout.警告{border-color:#FF198B}.devportal-callout.warning>strong:first-child:before,.devportal-callout.警告>strong:first-child:before{color:#FF198B}blockquote,.devportal-callout{border-style:solid;border-radius:0;border-width:1px;border-left-width:4px;padding:5px;padding-left:25px;page-break-inside:avoid}.devportal-callout>strong:first-child{display:block;page-break-after:avoid}.devportal-callout.tip>strong:first-child:before{content:"\f058";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.note>strong:first-child:before{content:"\f05a";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.caution>strong:first-child:before{content:"\f071";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.devportal-callout.warning>strong:first-child:before{content:"\f057";font-family:FontAwesome;margin-left:-20px;padding-right:5px}.card,.cta-card,.q-wrapper{box-shadow:0px 5px 40px #000}#code-samples-deck .card{box-shadow:none;margin:0 2rem 5rem 2rem}#code-samples-deck .card-header{border-bottom:none;background-color:unset}#code-samples-deck .card-footer{background-color:unset;font-size:initial}#code-samples-deck .card-deck .card a{margin:0 2.5rem 5rem 2.5rem}#code-samples-deck .circled-logo{margin-left:-15px}@media (min-width: 992px){.code-contribute{width:75vw;position:relative;left:20%;right:20%;margin-left:-30vw;margin-right:-30vw}}.contribute::before{content:"";display:block;height:2px;width:100%;position:absolute;top:0}.contribute .dot{height:16px;width:16px;background-color:#111112;border-radius:50%;border:3px solid #FBFF4C;display:inline-block;position:absolute;top:-7px;left:-6px}@media (max-width: 991.98px){.contribute::before{left:0;height:100%;width:2px;top:15px}.contribute .dot{top:5px;left:-6px}}.contribute_1::before{background:-webkit-linear-gradient(left, #feff01, #ff2d9a)}.contribute_1 .dot{border-color:#FBFF4C}.contribute_2::before{background:-webkit-linear-gradient(left, #ff2d9a, #e24cff)}.contribute_2 .dot{border-color:#FF198B}.contribute_3::before{background:-webkit-linear-gradient(left, #e24cff, #9a52ff)}.contribute_3 .dot{border-color:#C000E5}.contribute_4::before{background:-webkit-linear-gradient(left, #9a52ff, #9a52ff)}.contribute_4 .dot{border-color:#9A52FF}.card>img{border-radius:8px 8px 0 0}.card-body>p,.card-body>p:not(:last-child){padding:0;margin-bottom:2rem}a.card{border:0;color:#fff}a.card:hover,a:hover .card-new{text-decoration:none}a.card:hover h3{text-decoration:underline}.circled-logo{background-color:#454549;border-radius:50%;padding:.65rem;width:50px;height:50px;margin-bottom:0.75rem;border:2px solid #232325}.circled-logo img{width:26px;height:26px;display:inline-block}.light .circled-logo{border:none}.card-deck{margin-top:2.5rem;margin-left:-1.25rem;margin-right:-1.25rem;margin-bottom:5rem;flex-grow:1}@media (min-width: 992px){.card-deck{margin-top:5rem}}.card-deck .card{flex-grow:0;flex-basis:100%;margin:0 1.25rem 5rem 1.25rem;background-position:bottom;background-repeat:no-repeat;background-size:contain}.card-deck.row-cols-1 .card{flex-basis:100%;min-height:264px}@media (min-width: 768px){.card-deck.row-cols-1 .card{min-height:347px}}@media (min-width: 1200px){.card-deck.row-cols-lg-3{margin-left:-2.5rem;margin-right:-2.5rem}}@media (min-width: 992px){.card-deck.row-cols-lg-3 .card{flex-basis:calc(33% - 2.5rem)}}@media (min-width: 1200px){.card-deck.row-cols-lg-3 .card{margin:0 2.5rem 5rem 2.5rem;flex-basis:calc(33% - 5rem)}}@media (min-width: 992px){.card-deck.row-cols-lg-4 .card{flex-basis:calc(25% - 2.5rem)}}.card-deck a.card{transition:all 0.35s ease-out;cursor:pointer}.card-deck a.card:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}.card-deck .card-footer{font-size:0;padding:1rem;background-position:bottom;background-repeat:no-repeat;background-size:cover;border-top:0}@media (max-width: 991.98px){.card-deck{margin-top:2rem}.card-deck .card-body{padding:1rem}.card-deck.row-cols-1 .card{margin:0.75rem 0.75rem 5rem 0.75rem;max-width:calc(100% - 1.5rem)}.card-deck.row-cols-2 .card{margin:.75rem;max-width:calc(50% - 1.5rem)}}.cta-card{text-align:center;background-color:#232325}.breadcrumbs-wrap{position:relative;z-index:11;padding:0 0 2rem 0}.interactive-block .breadcrumbs-wrap{padding:0}.breadcrumb-item+.breadcrumb-item:before{content:"\f105";font-family:FontAwesome;padding-right:5px}.breadcrumbs-wrap .breadcrumb{padding:0;margin-bottom:0;font-size:0.833em}.breadcrumb-item a{color:#E0E0E1;text-decoration:none}.breadcrumb-item a:hover{color:#9A52FF}.landing .container-fluid.section-hero,.landing .section-hero.container-sm,.landing .section-hero.container-md,.landing .section-hero.container-lg,.landing .section-hero.container-xl{padding:48px 0}.landing .content .children-display>ul>li,.landing .content .curated-links>ul>li{margin-top:24px}.landing .content .children-display li a,.landing .content .curated-links li a{font-weight:700;font-size:1.25rem;text-decoration:none}.landing .content .children-display li a:hover,.landing .content .curated-links li a:hover{text-decoration:underline}.landing section:first-of-type h1:first-child{margin-top:0;line-height:1.2}.landing .level-1,.landing .level-2{margin-top:0}.landing .curated-links ul,.landing .curated-links ol,.landing .children-display ul{padding-left:0;margin-bottom:0}.landing .section-hero .blurb{font-size:1.2em;line-height:1.71em}.landing .doc-index .level-1{list-style-type:disc;margin-left:1rem}.landing .doc-index .level-2{list-style-type:circle;margin-left:2rem}.landing .doc-index .level-3{list-style-type:square;margin-left:3rem}.landing .doc-index .level-4{list-style-type:disc;margin-left:4rem}.landing .doc-index .level-5{margin-left:5rem;list-style-type:circle}.landing .doc-index .level-6{margin-left:6rem;list-style-type:square}.landing p a,.landing h5 a{color:#9A52FF;font-weight:600}.landing p a:hover,.landing h5 a:hover{text-decoration:underline}.landing .display-4{margin-bottom:1.5rem}.landing #test-net-servers h3{font-size:1.4rem;font-weight:700}.landing #test-net-servers pre{overflow-x:auto}.landing section:first-of-type{border-top-width:0}.landing #main_content_wrapper{border-bottom:none;margin-top:80px}.landing .marketing-wrapper{margin-top:10rem;margin-bottom:6rem}@media (max-width: 767.98px){.landing .marketing-wrapper{margin-top:6rem}}.landing .nav .nav-link{padding:1rem 2rem 1rem 0;color:#E0E0E1;border-bottom:1px solid #232325;position:relative}.landing .nav .nav-link:hover{color:#9A52FF}.landing .nav .nav-link:not(.external-link)::after{content:" ";background-image:url(../img/icons/arrow-right-purple.svg);background-repeat:no-repeat;background-position:center;background-size:1rem;position:absolute;right:0;width:1.5rem;height:1.5rem;transition:all .2s ease}.landing .nav .nav-link:not(.external-link):hover::after{animation:arrowDance2 1.2s infinite}.landing .nav .nav-link.external-link::after{content:" ";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;position:absolute;background-position:center;background-size:.75rem;right:7px;width:1.5rem;height:1.5rem;transition:all .2s ease}.landing .nav .nav-link.external-link:hover::after{animation:arrowDanceDiag 1.2s infinite}.landing .card-body .nav .nav-link{border-bottom:1px solid #454549}.alert-info{color:white;background-color:#006BB2;border-width:0}.alert-info a{text-decoration:underline;color:white}.alert-info a:hover{color:#E0E0E1}.highlight-subcard{margin:1.5rem 0;padding:1rem;border:2px solid #fff;background:#111112}.interactive-block-inner{border:1px dashed #9A52FF;padding:10px;margin:5px}.interactive-block-ui>button{margin:10px 0}.interactive-block input:invalid{box-shadow:inset 0 0 5px 5px #FF198B}.interactive-block .breadcrumbs-wrap{margin-bottom:11px}.interactive-block .breadcrumb-item{margin-top:6px}.interactive-block .breadcrumb-item a{text-decoration:none}.interactive-block .breadcrumb-item.current a{font-weight:bold}.interactive-block .breadcrumb-item.active a{color:#B480FF}.interactive-block .breadcrumb-item.disabled a{color:#454549}.interactive-block .breadcrumb-item.done a:after{content:"\f058";font-family:FontAwesome;color:#E0E0E1;padding-right:5px;padding-left:5px}.interactive-block .waiting-for-tx{word-break:break-word}.ws-console{height:200px;overflow:auto}.status{cursor:help;padding:1px 2px;font-weight:normal;text-indent:0}.status.not_enabled{color:#FAFF19}.status.removed{color:#FF198B}.labels-wrap ul::before{content:"\f02c";font-family:FontAwesome;font-size:1.5rem}.labels-wrap .list-inline-item{margin-top:0.5rem}.pg-category{color:#A2A2A4}.pg-category::after{content:"\f105";font-family:FontAwesome;padding-left:5px}.label{border-radius:100px;border-width:0;padding:.5rem 1rem;font-weight:bold;text-decoration:none !important;text-align:center;white-space:nowrap;background-color:#111112;color:#C1C1C2}.label .badge-pill{width:24px;height:24px;border-radius:50px;margin-left:0.5rem;font-weight:400;line-height:23px;font-size:16px;padding:0;margin-top:-2px}html.light .label{background-color:#E0E0E1;color:#232325}html.light .label .badge-pill{color:#E0E0E1;background-color:#232325}html.light .label:hover{background-color:#C1C1C2;color:#111112}html.light .label:hover .badge-pill{color:#C1C1C2;background-color:#111112}.label .badge-pill{color:#111112;background-color:#C1C1C2}.label:hover{color:#E0E0E1;background-color:#232325}.label:hover .badge-pill{color:#232325;background-color:#E0E0E1}.label.label-accounts,.label.label-payment-channels,.label.label-amm,.label.label-アカウント,.label.label-payment-channel,.label.label-use-infrastructure,.label.label-use-security,.label.chip-indigo{background-color:#20004C;color:#B480FF}.label.label-accounts .badge-pill,.label.label-payment-channels .badge-pill,.label.label-amm .badge-pill,.label.label-アカウント .badge-pill,.label.label-payment-channel .badge-pill,.label.label-use-infrastructure .badge-pill,.label.label-use-security .badge-pill,.label.chip-indigo .badge-pill{color:#20004C;background-color:#B480FF}.label.label-accounts:hover,.label.label-payment-channels:hover,.label.label-amm:hover,.label.label-アカウント:hover,.label.label-payment-channel:hover,.label.label-use-infrastructure:hover,.label.label-use-security:hover,.label.chip-indigo:hover{background-color:#350080;color:#D2B2FF}.label.label-accounts:hover .badge-pill,.label.label-payment-channels:hover .badge-pill,.label.label-amm:hover .badge-pill,.label.label-アカウント:hover .badge-pill,.label.label-payment-channel:hover .badge-pill,.label.label-use-infrastructure:hover .badge-pill,.label.label-use-security:hover .badge-pill,.label.chip-indigo:hover .badge-pill{color:#350080;background-color:#D2B2FF}html.light .label.label-accounts,html.light .label.label-payment-channels,html.light .label.label-amm,html.light .label.label-アカウント,html.light .label.label-payment-channel,html.light .label.label-use-infrastructure,html.light .label.label-use-security,html.light .label.chip-indigo{background-color:#D2B2FF;color:#350080}html.light .label.label-accounts .badge-pill,html.light .label.label-payment-channels .badge-pill,html.light .label.label-amm .badge-pill,html.light .label.label-アカウント .badge-pill,html.light .label.label-payment-channel .badge-pill,html.light .label.label-use-infrastructure .badge-pill,html.light .label.label-use-security .badge-pill,html.light .label.chip-indigo .badge-pill{color:#D2B2FF;background-color:#350080}html.light .label.label-accounts:hover,html.light .label.label-payment-channels:hover,html.light .label.label-amm:hover,html.light .label.label-アカウント:hover,html.light .label.label-payment-channel:hover,html.light .label.label-use-infrastructure:hover,html.light .label.label-use-security:hover,html.light .label.chip-indigo:hover{background-color:#B480FF;color:#20004C}html.light .label.label-accounts:hover .badge-pill,html.light .label.label-payment-channels:hover .badge-pill,html.light .label.label-amm:hover .badge-pill,html.light .label.label-アカウント:hover .badge-pill,html.light .label.label-payment-channel:hover .badge-pill,html.light .label.label-use-infrastructure:hover .badge-pill,html.light .label.label-use-security:hover .badge-pill,html.light .label.chip-indigo:hover .badge-pill{color:#B480FF;background-color:#20004C}.label.label-blockchain,.label.label-xrp,.label.label-ブロックチェーン,.label.label-non-fungible-tokens-nfts,.label.label-use-nfts,.label.chip-green{background-color:#145C35;color:#84F0B6}.label.label-blockchain .badge-pill,.label.label-xrp .badge-pill,.label.label-ブロックチェーン .badge-pill,.label.label-non-fungible-tokens-nfts .badge-pill,.label.label-use-nfts .badge-pill,.label.chip-green .badge-pill{background-color:#84F0B6;color:#145C35}.label.label-blockchain:hover,.label.label-xrp:hover,.label.label-ブロックチェーン:hover,.label.label-non-fungible-tokens-nfts:hover,.label.label-use-nfts:hover,.label.chip-green:hover{background-color:#1E8A50;color:#ADF5CE}.label.label-blockchain:hover .badge-pill,.label.label-xrp:hover .badge-pill,.label.label-ブロックチェーン:hover .badge-pill,.label.label-non-fungible-tokens-nfts:hover .badge-pill,.label.label-use-nfts:hover .badge-pill,.label.chip-green:hover .badge-pill{background-color:#ADF5CE;color:#1E8A50}html.light .label.label-blockchain,html.light .label.label-xrp,html.light .label.label-ブロックチェーン,html.light .label.label-non-fungible-tokens-nfts,html.light .label.label-use-nfts,html.light .label.chip-green{background-color:#ADF5CE;color:#145C35}html.light .label.label-blockchain .badge-pill,html.light .label.label-xrp .badge-pill,html.light .label.label-ブロックチェーン .badge-pill,html.light .label.label-non-fungible-tokens-nfts .badge-pill,html.light .label.label-use-nfts .badge-pill,html.light .label.chip-green .badge-pill{color:#ADF5CE;background-color:#145C35}html.light .label.label-blockchain:hover,html.light .label.label-xrp:hover,html.light .label.label-ブロックチェーン:hover,html.light .label.label-non-fungible-tokens-nfts:hover,html.light .label.label-use-nfts:hover,html.light .label.chip-green:hover{background-color:#84F0B6;color:#000}html.light .label.label-blockchain:hover .badge-pill,html.light .label.label-xrp:hover .badge-pill,html.light .label.label-ブロックチェーン:hover .badge-pill,html.light .label.label-non-fungible-tokens-nfts:hover .badge-pill,html.light .label.label-use-nfts:hover .badge-pill,html.light .label.chip-green:hover .badge-pill{color:#84F0B6;background-color:#000}.label.label-checks,.label.label-core-server,.label.label-コアサーバー,.label.label-use-interoperability,.label.label-use-web_monetization,.label.chip-purple{background-color:#40004C;color:#EA80FF}.label.label-checks .badge-pill,.label.label-core-server .badge-pill,.label.label-コアサーバー .badge-pill,.label.label-use-interoperability .badge-pill,.label.label-use-web_monetization .badge-pill,.label.chip-purple .badge-pill{background-color:#EA80FF;color:#40004C}.label.label-checks:hover,.label.label-core-server:hover,.label.label-コアサーバー:hover,.label.label-use-interoperability:hover,.label.label-use-web_monetization:hover,.label.chip-purple:hover{background-color:#6B0080;color:#F2B2FF}.label.label-checks:hover .badge-pill,.label.label-core-server:hover .badge-pill,.label.label-コアサーバー:hover .badge-pill,.label.label-use-interoperability:hover .badge-pill,.label.label-use-web_monetization:hover .badge-pill,.label.chip-purple:hover .badge-pill{background-color:#F2B2FF;color:#6B0080}html.light .label.label-checks,html.light .label.label-core-server,html.light .label.label-コアサーバー,html.light .label.label-use-interoperability,html.light .label.label-use-web_monetization,html.light .label.chip-purple{background-color:#F2B2FF;color:#6B0080}html.light .label.label-checks .badge-pill,html.light .label.label-core-server .badge-pill,html.light .label.label-コアサーバー .badge-pill,html.light .label.label-use-interoperability .badge-pill,html.light .label.label-use-web_monetization .badge-pill,html.light .label.chip-purple .badge-pill{color:#F2B2FF;background-color:#6B0080}html.light .label.label-checks:hover,html.light .label.label-core-server:hover,html.light .label.label-コアサーバー:hover,html.light .label.label-use-interoperability:hover,html.light .label.label-use-web_monetization:hover,html.light .label.chip-purple:hover{background-color:#EA80FF;color:#40004C}html.light .label.label-checks:hover .badge-pill,html.light .label.label-core-server:hover .badge-pill,html.light .label.label-コアサーバー:hover .badge-pill,html.light .label.label-use-interoperability:hover .badge-pill,html.light .label.label-use-web_monetization:hover .badge-pill,html.light .label.chip-purple:hover .badge-pill{color:#EA80FF;background-color:#40004C}.label.label-cross-currency,.label.label-security,.label.label-複数通貨間,.label.label-セキュリティ,.label.label-use-gaming,.label.label-use-defi,.label.chip-yellow{background-color:#4B4C00;color:#FCFF80}.label.label-cross-currency .badge-pill,.label.label-security .badge-pill,.label.label-複数通貨間 .badge-pill,.label.label-セキュリティ .badge-pill,.label.label-use-gaming .badge-pill,.label.label-use-defi .badge-pill,.label.chip-yellow .badge-pill{background-color:#FCFF80;color:#4B4C00}.label.label-cross-currency:hover,.label.label-security:hover,.label.label-複数通貨間:hover,.label.label-セキュリティ:hover,.label.label-use-gaming:hover,.label.label-use-defi:hover,.label.chip-yellow:hover{background-color:#7D8000;color:#FDFFB2}.label.label-cross-currency:hover .badge-pill,.label.label-security:hover .badge-pill,.label.label-複数通貨間:hover .badge-pill,.label.label-セキュリティ:hover .badge-pill,.label.label-use-gaming:hover .badge-pill,.label.label-use-defi:hover .badge-pill,.label.chip-yellow:hover .badge-pill{background-color:#FDFFB2;color:#7D8000}html.light .label.label-cross-currency,html.light .label.label-security,html.light .label.label-複数通貨間,html.light .label.label-セキュリティ,html.light .label.label-use-gaming,html.light .label.label-use-defi,html.light .label.chip-yellow{background-color:#FDFFB2;color:#7D8000}html.light .label.label-cross-currency .badge-pill,html.light .label.label-security .badge-pill,html.light .label.label-複数通貨間 .badge-pill,html.light .label.label-セキュリティ .badge-pill,html.light .label.label-use-gaming .badge-pill,html.light .label.label-use-defi .badge-pill,html.light .label.chip-yellow .badge-pill{color:#FDFFB2;background-color:#7D8000}html.light .label.label-cross-currency:hover,html.light .label.label-security:hover,html.light .label.label-複数通貨間:hover,html.light .label.label-セキュリティ:hover,html.light .label.label-use-gaming:hover,html.light .label.label-use-defi:hover,html.light .label.chip-yellow:hover{background-color:#FCFF80;color:#4B4C00}html.light .label.label-cross-currency:hover .badge-pill,html.light .label.label-security:hover .badge-pill,html.light .label.label-複数通貨間:hover .badge-pill,html.light .label.label-セキュリティ:hover .badge-pill,html.light .label.label-use-gaming:hover .badge-pill,html.light .label.label-use-defi:hover .badge-pill,html.light .label.chip-yellow:hover .badge-pill{color:#FCFF80;background-color:#4B4C00}.label.label-decentralized-exchange,.label.label-smart-contracts,.label.label-transaction-sending,.label.label-分散型取引所,.label.label-スマートコントラクト,.label.label-トランザクション送信,.label.label-use-developer_tooling,.label.label-use-payments,.label.chip-blue{background-color:#002E4C;color:#80CCFF}.label.label-decentralized-exchange .badge-pill,.label.label-smart-contracts .badge-pill,.label.label-transaction-sending .badge-pill,.label.label-分散型取引所 .badge-pill,.label.label-スマートコントラクト .badge-pill,.label.label-トランザクション送信 .badge-pill,.label.label-use-developer_tooling .badge-pill,.label.label-use-payments .badge-pill,.label.chip-blue .badge-pill{background-color:#80CCFF;color:#002E4C}.label.label-decentralized-exchange:hover,.label.label-smart-contracts:hover,.label.label-transaction-sending:hover,.label.label-分散型取引所:hover,.label.label-スマートコントラクト:hover,.label.label-トランザクション送信:hover,.label.label-use-developer_tooling:hover,.label.label-use-payments:hover,.label.chip-blue:hover{background-color:#004D80;color:#B2E0FF}.label.label-decentralized-exchange:hover .badge-pill,.label.label-smart-contracts:hover .badge-pill,.label.label-transaction-sending:hover .badge-pill,.label.label-分散型取引所:hover .badge-pill,.label.label-スマートコントラクト:hover .badge-pill,.label.label-トランザクション送信:hover .badge-pill,.label.label-use-developer_tooling:hover .badge-pill,.label.label-use-payments:hover .badge-pill,.label.chip-blue:hover .badge-pill{background-color:#B2E0FF;color:#004D80}html.light .label.label-decentralized-exchange,html.light .label.label-smart-contracts,html.light .label.label-transaction-sending,html.light .label.label-分散型取引所,html.light .label.label-スマートコントラクト,html.light .label.label-トランザクション送信,html.light .label.label-use-developer_tooling,html.light .label.label-use-payments,html.light .label.chip-blue{background-color:#B2E0FF;color:#004D80}html.light .label.label-decentralized-exchange .badge-pill,html.light .label.label-smart-contracts .badge-pill,html.light .label.label-transaction-sending .badge-pill,html.light .label.label-分散型取引所 .badge-pill,html.light .label.label-スマートコントラクト .badge-pill,html.light .label.label-トランザクション送信 .badge-pill,html.light .label.label-use-developer_tooling .badge-pill,html.light .label.label-use-payments .badge-pill,html.light .label.chip-blue .badge-pill{color:#B2E0FF;background-color:#004D80}html.light .label.label-decentralized-exchange:hover,html.light .label.label-smart-contracts:hover,html.light .label.label-transaction-sending:hover,html.light .label.label-分散型取引所:hover,html.light .label.label-スマートコントラクト:hover,html.light .label.label-トランザクション送信:hover,html.light .label.label-use-developer_tooling:hover,html.light .label.label-use-payments:hover,html.light .label.chip-blue:hover{background-color:#80CCFF;color:#002E4C}html.light .label.label-decentralized-exchange:hover .badge-pill,html.light .label.label-smart-contracts:hover .badge-pill,html.light .label.label-transaction-sending:hover .badge-pill,html.light .label.label-分散型取引所:hover .badge-pill,html.light .label.label-スマートコントラクト:hover .badge-pill,html.light .label.label-トランザクション送信:hover .badge-pill,html.light .label.label-use-developer_tooling:hover .badge-pill,html.light .label.label-use-payments:hover .badge-pill,html.light .label.chip-blue:hover .badge-pill{color:#80CCFF;background-color:#002E4C}.label.label-escrow,.label.label-tokens,.label.label-development,.label.label-トークン,.label.label-開発,.label.label-use-wallet,.label.label-use-sustainability,.label.chip-orange{background-color:#4C1A00;color:#FFAA80}.label.label-escrow .badge-pill,.label.label-tokens .badge-pill,.label.label-development .badge-pill,.label.label-トークン .badge-pill,.label.label-開発 .badge-pill,.label.label-use-wallet .badge-pill,.label.label-use-sustainability .badge-pill,.label.chip-orange .badge-pill{background-color:#FFAA80;color:#4C1A00}.label.label-escrow:hover,.label.label-tokens:hover,.label.label-development:hover,.label.label-トークン:hover,.label.label-開発:hover,.label.label-use-wallet:hover,.label.label-use-sustainability:hover,.label.chip-orange:hover{background-color:#802B00;color:#FFCCB2}.label.label-escrow:hover .badge-pill,.label.label-tokens:hover .badge-pill,.label.label-development:hover .badge-pill,.label.label-トークン:hover .badge-pill,.label.label-開発:hover .badge-pill,.label.label-use-wallet:hover .badge-pill,.label.label-use-sustainability:hover .badge-pill,.label.chip-orange:hover .badge-pill{background-color:#FFCCB2;color:#802B00}html.light .label.label-escrow,html.light .label.label-tokens,html.light .label.label-development,html.light .label.label-トークン,html.light .label.label-開発,html.light .label.label-use-wallet,html.light .label.label-use-sustainability,html.light .label.chip-orange{background-color:#FFCCB2;color:#802B00}html.light .label.label-escrow .badge-pill,html.light .label.label-tokens .badge-pill,html.light .label.label-development .badge-pill,html.light .label.label-トークン .badge-pill,html.light .label.label-開発 .badge-pill,html.light .label.label-use-wallet .badge-pill,html.light .label.label-use-sustainability .badge-pill,html.light .label.chip-orange .badge-pill{color:#FFCCB2;background-color:#802B00}html.light .label.label-escrow:hover,html.light .label.label-tokens:hover,html.light .label.label-development:hover,html.light .label.label-トークン:hover,html.light .label.label-開発:hover,html.light .label.label-use-wallet:hover,html.light .label.label-use-sustainability:hover,html.light .label.chip-orange:hover{background-color:#FFAA80;color:#4C1A00}html.light .label.label-escrow:hover .badge-pill,html.light .label.label-tokens:hover .badge-pill,html.light .label.label-development:hover .badge-pill,html.light .label.label-トークン:hover .badge-pill,html.light .label.label-開発:hover .badge-pill,html.light .label.label-use-wallet:hover .badge-pill,html.light .label.label-use-sustainability:hover .badge-pill,html.light .label.chip-orange:hover .badge-pill{color:#FFAA80;background-color:#4C1A00}.label.label-fees,.label.label-payments,.label.label-data-retention,.label.label-手数料,.label.label-支払い,.label.label-データ保持,.label.label-use-exchanges,.label.label-use-custody,.label.chip-magenta{background-color:#4C0026;color:#FF80BF}.label.label-fees .badge-pill,.label.label-payments .badge-pill,.label.label-data-retention .badge-pill,.label.label-手数料 .badge-pill,.label.label-支払い .badge-pill,.label.label-データ保持 .badge-pill,.label.label-use-exchanges .badge-pill,.label.label-use-custody .badge-pill,.label.chip-magenta .badge-pill{background-color:#FF80BF;color:#4C0026}.label.label-fees:hover,.label.label-payments:hover,.label.label-data-retention:hover,.label.label-手数料:hover,.label.label-支払い:hover,.label.label-データ保持:hover,.label.label-use-exchanges:hover,.label.label-use-custody:hover,.label.chip-magenta:hover{background-color:#80003F;color:#FFB2D8}.label.label-fees:hover .badge-pill,.label.label-payments:hover .badge-pill,.label.label-data-retention:hover .badge-pill,.label.label-手数料:hover .badge-pill,.label.label-支払い:hover .badge-pill,.label.label-データ保持:hover .badge-pill,.label.label-use-exchanges:hover .badge-pill,.label.label-use-custody:hover .badge-pill,.label.chip-magenta:hover .badge-pill{background-color:#FFB2D8;color:#80003F}html.light .label.label-fees,html.light .label.label-payments,html.light .label.label-data-retention,html.light .label.label-手数料,html.light .label.label-支払い,html.light .label.label-データ保持,html.light .label.label-use-exchanges,html.light .label.label-use-custody,html.light .label.chip-magenta{background-color:#FFB2D8;color:#80003F}html.light .label.label-fees .badge-pill,html.light .label.label-payments .badge-pill,html.light .label.label-data-retention .badge-pill,html.light .label.label-手数料 .badge-pill,html.light .label.label-支払い .badge-pill,html.light .label.label-データ保持 .badge-pill,html.light .label.label-use-exchanges .badge-pill,html.light .label.label-use-custody .badge-pill,html.light .label.chip-magenta .badge-pill{color:#FFB2D8;background-color:#80003F}html.light .label.label-fees:hover,html.light .label.label-payments:hover,html.light .label.label-data-retention:hover,html.light .label.label-手数料:hover,html.light .label.label-支払い:hover,html.light .label.label-データ保持:hover,html.light .label.label-use-exchanges:hover,html.light .label.label-use-custody:hover,html.light .label.chip-magenta:hover{background-color:#FF80BF;color:#4C0026}html.light .label.label-fees:hover .badge-pill,html.light .label.label-payments:hover .badge-pill,html.light .label.label-data-retention:hover .badge-pill,html.light .label.label-手数料:hover .badge-pill,html.light .label.label-支払い:hover .badge-pill,html.light .label.label-データ保持:hover .badge-pill,html.light .label.label-use-exchanges:hover .badge-pill,html.light .label.label-use-custody:hover .badge-pill,html.light .label.chip-magenta:hover .badge-pill{color:#FF80BF;background-color:#4C0026}.tag-cloud .list-inline-item{margin-top:1.5rem}#tx-sender-history .list-group-item{font-size:small;color:#454549}.response-metadata .timestamp{color:#454549;position:relative;top:16px}.throbber{width:24px;height:24px}#connection-status .card-body{border-left:0}#connection-status-item.active{background-color:#32E685;border-color:#32E685}.api-input-area .btn-group>.send-request.btn{border-bottom-right-radius:4px;border-top-right-radius:4px}#tx-sender-history ul{overflow:auto;height:220px;border:1px solid #E0E0E1}#pp_progress small{margin-top:.5rem}.page-tx-sender .input-group .form-control,.interactive-block-ui .input-group .form-control{flex:1 1 20%;height:auto}.bootstrap-growl{max-width:90vw !important;overflow:hidden}.list-group-item-danger,#tx-sender-history .list-group-item-danger{background-color:#FF80BF;color:#000}.list-group-item-danger a,#tx-sender-history .list-group-item-danger a{color:#000}.list-group-item-danger a:hover,#tx-sender-history .list-group-item-danger a:hover{color:#000;text-decoration:underline}.rpc-tool .main h1::before,.rpc-tool .main h2::before,.rpc-tool .main h3::before{display:none}@media print{.multicode>div{display:block !important}.multicode>em,.multicode>p>em{display:block !important;page-break-after:avoid}.multicode>p{display:block !important}.code_toggler{display:none}pre{white-space:pre-wrap;max-height:none !important;overflow:visible;page-break-inside:auto;word-wrap:break-word}pre code{white-space:pre-wrap !important;color:#22252B !important}code{white-space:pre-wrap !important;color:#22252B !important}.codehilite .n,.codehilite .na,.codehilite .nb,.codehilite .nc,.codehilite .nd,.codehilite .ne,.codehilite .nf,.codehilite .ni,.codehilite .nl,.codehilite .nn,.codehilite .nt,.codehilite .nv,.codehilite .nx,.codehilite .bp,.codehilite .fm,.codehilite .py{color:#22252B}.content a[title="Source"]{float:none}header,footer,aside{display:none !important}.navbar{display:none !important}.content,#main_content_body{position:static;display:block;width:auto;height:auto;color:black !important;max-width:100%;overflow:visible !important}body{overflow:visible;background:#fff}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{color:black}.interactive-block{display:none}.container{margin-top:1rem !important}#main_content_wrapper{margin-top:0}#main_content_body::before{display:none}.xrp-ledger-dev-portal.sidebar-primary .main{border:0}.sidebar-primary .row{display:block}#feedback-content{display:none !important}.jump-to-top{display:none !important}}#home-purple{position:absolute;left:0;top:-400px}#home-green{position:absolute;right:-3px;top:60px}.sidelinks:hover{color:#9A52FF}.sidelinks.active{color:#9A52FF;font-weight:bold}.page-home #home-hero-graphic{content:url("../img/home-hero.svg");margin-left:auto;width:856px;margin-right:auto;margin-bottom:24px;max-width:100%}.page-home #benefits-list #public{content:url("../img/icons/public.svg")}.page-home #benefits-list #streamlined{content:url("../img/icons/streamlined.svg")}.page-home #benefits-list #performance{content:url("../img/icons/performance.svg")}.page-home #benefits-list #low-cost{content:url("../img/icons/low-cost.svg")}.page-home #benefits-list #community{content:url("../img/icons/community.svg")}.page-home #benefits-list #reliability{content:url("../img/icons/reliability.svg")}.page-home #advanced-features .card:nth-child(1) .card-footer{background-image:url("../img/cards/3col-pink-purple.svg")}.page-home #advanced-features .card:nth-child(2) .card-footer{background-image:url("../img/cards/3col-neutral-blue.svg")}.page-home #advanced-features .card:nth-child(3) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.page-home #advanced-features .card:nth-child(4) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.page-home #advanced-features .card:nth-child(5) .card-footer{background-image:url("../img/cards/3col-purple-blue-2.svg")}.page-home #get-started .card:nth-child(1) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.page-home #get-started .card:nth-child(2) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.page-home #get-started .card:nth-child(3) .card-footer{background-image:url("../img/cards/3col-purple-blue-green.svg")}.page-home #get-started .card:nth-child(4) .card-footer{background-image:url("../img/cards/3col-light-blue.svg")}.page-home #get-started .card:nth-child(5) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.cta{position:absolute}.cta-top-left{top:0;left:0}.cta-bottom-right{bottom:0;right:0}.landing-bg{opacity:0.6}@media (min-width: 768px){.landing-bg{opacity:1}}.landing-builtin-bg::before{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background-repeat:no-repeat;background-position-x:left;background-position-y:top;opacity:0.6}@media (min-width: 768px){.landing-builtin-bg::before{opacity:1}}#xrp-overview-blue{position:absolute;top:0;left:0}@media (max-width: 767.98px){#xrp-mark-overview{height:40px;margin-top:16px}}#wallets #wallet-ledger{content:url("../img/wallets/ledger.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-secalot{content:url("../img/wallets/secalot.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-trezor{content:url("../img/wallets/trezor.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-xumm{content:url("../img/wallets/xumm.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-trust{content:url("../img/wallets/trust.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-gatehub{content:url("../img/wallets/gatehub.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-towo{content:url("../img/wallets/towo.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-keystone{content:url("../img/wallets/keystone.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#wallets #wallet-dcent{content:url("../img/wallets/dcent.svg")}#wallets #wallet-bitfrost{content:url("../img/wallets/bitfrost.png")}#top-exchanges #exch-bitstamp{content:url("../img/exchanges/bitstamp.svg")}#top-exchanges #exch-kraken{content:url("../img/exchanges/kraken.svg")}#top-exchanges #exch-cex-io{content:url("../img/exchanges/cex-io.svg")}#top-exchanges #exch-liquid{content:url("../img/exchanges/liquid.svg")}#top-exchanges #exch-lmax{content:url("../img/exchanges/lmax.svg")}#top-exchanges #exch-bitfinex{content:url("../img/exchanges/bitfinex.svg")}#top-exchanges #exch-etoro{content:url("../img/exchanges/etoro.svg")}#top-exchanges #exch-bittrex{content:url("../img/exchanges/bittrex.png")}#top-exchanges #exch-currency-com{content:url("../img/exchanges/currency-com.png")}#top-exchanges #exch-ftx{content:url("../img/exchanges/ftx.png")}#xrpl-overview-purple{position:absolute;top:40px;left:0}@media (max-width: 767.98px){#xrpl-overview-purple{top:0;left:-20vw}}#xrpl-overview-orange{position:absolute;top:80px;right:-4px}#use-cases-orange{position:absolute;top:-480px;right:-4px}#validator-graphic{content:url(../img/validators.svg)}.page-uses .container-new{padding-left:16px;padding-right:16px}.page-uses h1{font-size:42px}.page-uses::before{transform:scaleX(-1);background-image:url(../img/backgrounds/use-cases-blue.svg)}.page-uses .card-grid{grid-gap:8px}.page-uses .card-grid img{max-height:40px}.page-uses .modal{padding:0}.page-uses .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#000;background-clip:padding-box;border:none;border-radius:0;box-shadow:none;outline:none;background:#111112}.page-uses .modal-header{border:none;background:#111112;box-shadow:0px 1px 2px #000}.page-uses .modal-header .cancel .chevron{transform:rotate(90deg)}.page-uses .modal-header .apply .chevron{transform:rotate(-90deg)}.page-uses .modal-footer{border:none;background:#111112;box-shadow:0px -1px 2px #000;align-items:unset;padding:0.75rem;flex-direction:column;flex-wrap:wrap}.page-uses .card-title{margin-bottom:0.5rem;line-height:26px}.page-uses .card-uses{padding:16px;margin:0;text-decoration:none;transition:all 0.35s ease-out}.page-uses .card-uses:hover{text-decoration:none;color:#E0E0E1;transform:translateY(-16px);text-decoration:none}.page-uses .card-body{background:#232325;border-radius:8px;height:100%;padding:32px;margin:0}.page-uses .page-events .label{font-weight:normal;font-size:14px;margin:0;padding-left:26px}.page-uses .category-header{font-weight:bold;color:#C1C1C2}.page-uses .light .category-checkbox label{color:#ffffff}.page-uses .category-checkbox{display:flex;align-items:center}.page-uses .category-checkbox label{font-weight:normal;font-size:14px;margin:0;padding-left:26px}.page-uses .category_count{margin-left:8px;padding:2px 16px;width:24px;height:16px;background:#350080;border-radius:100px;font-weight:600;font-size:12px;line-height:16px;color:#B480FF}.page-uses .category_sidebar{position:sticky;top:10px}.page-uses #infrastructure{content:url("../img/icons/usecases/ic_infrastructure.png")}.page-uses #developer_tooling{content:url("../img/icons/usecases/ic_developer_tooling.png")}.page-uses #interoperability{content:url("../img/icons/usecases/ic_interoperability.png")}.page-uses #wallet{content:url("../img/icons/usecases/ic_wallet.png")}.page-uses #nfts{content:url("../img/icons/usecases/ic_nfts.png")}.page-uses #exchanges{content:url("../img/icons/usecases/ic_exchanges.png")}.page-uses #gaming{content:url("../img/icons/usecases/ic_gaming.png")}.page-uses #security{content:url("../img/icons/usecases/ic_security.png")}.page-uses #payments{content:url("../img/icons/usecases/ic_payments.png")}.page-uses #web_monetization{content:url("../img/icons/usecases/ic_web_monetization.png")}.page-uses #sustainability{content:url("../img/icons/usecases/ic_sustainability.png")}.page-uses #cbdc{content:url("../img/icons/usecases/ic_cbdc.png")}.page-uses #other{content:url("../img/icons/usecases/ic_other.png")}.page-uses #carbon_markets{content:url("../img/icons/usecases/ic_carbon_markets.png")}.page-uses #custody{content:url("../img/icons/usecases/ic_custody.png")}.page-uses #defi{content:url("../img/icons/usecases/ic_defi.png")}.page-uses #use_case_companies_list #bithomp .biz-logo{max-height:40px;content:url("../img/uses/bithomp.svg")}.page-uses #use_case_companies_list #onthedex .biz-logo{max-height:40px;content:url("../img/uses/onthedex.svg")}.page-uses #use_case_companies_list #gatehub .biz-logo{max-height:40px;content:url("../img/uses/gatehub.svg")}.page-uses #use_case_companies_list #towo-labs .biz-logo{max-height:40px;content:url("../img/uses/towo-labs.svg")}.page-uses #use_case_companies_list #xrp-toolkit .biz-logo{max-height:40px;content:url("../img/uses/xrp-toolkit.svg")}.page-uses #use_case_companies_list #xrpl-org-ledger-explorer .biz-logo{max-height:40px;content:url("../img/uses/xrpl-org-ledger-explorer.svg")}.page-uses #use_case_companies_list #xrpl-rosetta .biz-logo{max-height:40px;content:url("../img/uses/xrpl-rosetta.svg")}.page-uses #use_case_companies_list #xrpscan .biz-logo{max-height:40px;content:url("../img/uses/xrpscan.svg")}.page-uses #use_case_companies_list #evernode .biz-logo{max-height:40px;content:url("../img/uses/evernode.svg")}.page-uses #use_case_companies_list #cryptum .biz-logo{max-height:40px;content:url("../img/uses/cryptum.svg")}.page-uses #use_case_companies_list #x-tokenize .biz-logo{max-height:40px;content:url("../img/uses/x-tokenize.svg")}.page-uses #use_case_companies_list #multichain .biz-logo{max-height:40px;content:url("../img/uses/multichain.svg")}.page-uses #use_case_companies_list #xumm-wallet .biz-logo{max-height:40px;content:url("../img/uses/xumm-wallet.svg")}.page-uses #use_case_companies_list #gem-wallet .biz-logo{max-height:40px;content:url("../img/uses/gem-wallet.svg")}.page-uses #use_case_companies_list #aesthetes .biz-logo{max-height:40px;content:url("../img/uses/aesthetes.svg")}.page-uses #use_case_companies_list #audiotarky .biz-logo{max-height:40px;content:url("../img/uses/audiotarky.svg")}.page-uses #use_case_companies_list #xrp-cafe .biz-logo{max-height:40px;content:url("../img/uses/xrp-cafe.svg")}.page-uses #use_case_companies_list #nft-master .biz-logo{max-height:40px;content:url("../img/uses/nft-master.svg")}.page-uses #use_case_companies_list #onxrp .biz-logo{max-height:40px;content:url("../img/uses/onxrp.svg")}.page-uses #use_case_companies_list #peerkat .biz-logo{max-height:40px;content:url("../img/uses/peerkat.svg")}.page-uses #use_case_companies_list #sologenic-nft .biz-logo{max-height:40px;content:url("../img/uses/sologenic-nft.svg")}.page-uses #use_case_companies_list #sologenic-dex .biz-logo{max-height:40px;content:url("../img/uses/sologenic-dex.svg")}.page-uses #use_case_companies_list #xp-market .biz-logo{max-height:40px;content:url("../img/uses/xp-market.svg")}.page-uses #use_case_companies_list #ledger-city .biz-logo{max-height:40px;content:url("../img/uses/ledger-city.svg")}.page-uses #use_case_companies_list #forte .biz-logo{max-height:40px;content:url("../img/uses/forte.svg")}.page-uses #use_case_companies_list #anchain-ai .biz-logo{max-height:40px;content:url("../img/uses/anchain-ai.svg")}.page-uses #use_case_companies_list #coil .biz-logo{max-height:40px;content:url("../img/uses/coil.svg")}.page-uses #use_case_companies_list #carbonland-trust .biz-logo{max-height:40px;content:url("../img/uses/carbonland-trust.svg")}.page-uses #use_case_companies_list #casino-coin .biz-logo{max-height:40px;content:url("../img/uses/casino-coin.svg")}.page-uses #use_case_companies_list #bitgo .biz-logo{max-height:40px;content:url("../img/uses/bitgo.svg")}.page-uses #use_case_companies_list #bitpay .biz-logo{max-height:40px;content:url("../img/uses/bitpay.svg")}.page-uses #use_case_companies_list #ripples-on-demand-liquidity .biz-logo{max-height:40px;content:url("../img/uses/ripples-on-demand-liquidity.svg")}.page-uses #use_case_companies_list #ripples-cbdc-platform .biz-logo{max-height:40px;content:url("../img/uses/ripples-cbdc-platform.svg")}.page-uses #use_case_companies_list #momento .biz-logo{max-height:40px;content:url("../img/uses/momento.svg")}.page-uses #use_case_companies_list #Crossmark .biz-logo{max-height:40px;content:url("../img/uses/Crossmark.png")}.page-uses #use_case_companies_list #Edge .biz-logo{max-height:40px;content:url("../img/uses/Edge.png")}@media (min-width: 992px){.page-uses h1{font-size:62px}.page-uses .container-new{padding-left:64px;padding-right:64px}.page-uses .card-grid img{max-height:48px}.page-uses .card-grid{grid-gap:48px}.page-uses .card-uses{padding:24px}}#history-orange{position:absolute;top:0;right:-4px}#history-purple{position:absolute;top:-480px;left:-4px}.hidden-section{overflow:hidden;visibility:hidden;height:0}.hidden-section.show{overflow:auto;visibility:visible;height:auto}#impact-green{position:absolute;top:0;left:-4px;rotate:180deg}#impact-purple{position:absolute;top:100px;right:-4px}#impact-magenta{position:absolute;top:100px;right:-4px}#foundation-magenta{position:absolute;top:0px;left:0px}#foundation-orange{position:absolute;top:40px;right:-4px}.page-impact #map-light{display:none}.page-impact #map-dark{display:block}.page-impact .connect-list #connect-01{content:url("../img/impact/connect-01.svg")}.page-impact .connect-list #connect-02{content:url("../img/impact/connect-02.svg")}.page-impact .connect-list #connect-03{content:url("../img/impact/connect-03.svg")}.page-impact .connect-list #connect-04{content:url("../img/impact/connect-04.svg")}.page-funding .funding-list #funding-01{content:url("../img/funding/funding-01.svg")}.page-funding .funding-list #funding-02{content:url("../img/funding/funding-02.svg")}.page-funding .funding-list #funding-03{content:url("../img/funding/funding-03.svg")}.page-funding .funding-list #funding-04{content:url("../img/funding/funding-04.svg")}.page-funding #funding-orange{position:absolute;top:132px;left:-4px}@media (min-width: 992px){.page-funding .funding-box{min-height:200px}}.page-ambassadors #benefits-list #benefits-01{content:url("../img/ambassadors/benefits-01.svg")}.page-ambassadors #benefits-list #benefits-02{content:url("../img/ambassadors/benefits-02.svg")}.page-ambassadors #benefits-list #benefits-03{content:url("../img/ambassadors/benefits-03.svg")}.page-ambassadors #benefits-list #benefits-04{content:url("../img/ambassadors/benefits-04.svg")}.page-ambassadors #benefits-list #benefits-05{content:url("../img/ambassadors/benefits-05.svg")}.page-ambassadors #benefits-list #benefits-06{content:url("../img/ambassadors/benefits-06.svg")}.page-ambassadors #eligibility-list #eligibility-01{content:url("../img/ambassadors/eligibility-01.svg")}.page-ambassadors #eligibility-list #eligibility-02{content:url("../img/ambassadors/eligibility-02.svg")}.page-ambassadors #eligibility-list #eligibility-03{content:url("../img/ambassadors/eligibility-03.svg")}.page-ambassadors #eligibility-list #eligibility-04{content:url("../img/ambassadors/eligibility-04.svg")}.page-ambassadors #eligibility-list #eligibility-05{content:url("../img/ambassadors/eligibility-05.svg")}.page-ambassadors .btn{padding:0.75rem}.page-ambassadors #container-scroll{height:160px;position:relative;overflow:hidden;margin-top:80px;margin-bottom:64px}.page-ambassadors .photobanner{position:absolute;top:0px;left:0px;overflow:hidden;white-space:nowrap;animation:bannermove 40s linear infinite}.page-ambassadors .photobanner-bottom{top:112px}.page-ambassadors .photobanner img{margin:0 0.5em}@keyframes bannermove{0%{transform:translate(0, 0)}100%{transform:translate(-50%, 0)}}.page-ambassadors #carouselSlidesOnly{height:392px;margin-bottom:40px}@media (min-width: 992px){.page-ambassadors #carouselSlidesOnly{height:320px;margin-bottom:104px}}.page-ambassadors h6{font-size:1.25rem}.page-ambassadors .btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right-purple.svg);vertical-align:middle;padding-left:8px;transition:transform 0.3s ease-out}.page-ambassadors .btn-arrow:hover{text-decoration:none;background:none !important;border:none}.page-ambassadors .btn-arrow:hover::after{background-position:left 4px bottom 4px;transform:translateX(4px)}#community-magenta{position:absolute;top:0px;left:0px}#community-purple{position:absolute;top:160px;right:0px}.page-events #event-hero-image{height:100%;min-height:209px;background:url(../img/events/event-hero1@2x.png);background-size:contain;background-repeat:no-repeat;background-position:center}.page-events #events-orange{position:absolute;top:0px;right:0px}.page-events .event-hero{color:#F5F5F7}.page-events .event-hero p{font-weight:500;font-size:24px;line-height:32px}.page-events .event-save-date{color:#fff;font-weight:bold;font-size:20px;line-height:26px}.page-events .event-small-gray{color:#E0E0E1}.page-events .btn{padding:0.75rem}.page-events .event-card{max-width:311px;margin:32px auto;transition:all 0.35s ease-out;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-clip:border-box;background-color:#232325;box-shadow:0px 5px 40px #000;border:1px solid rgba(0,0,0,0.125);border-radius:8px;font-size:16px;line-height:24px;color:#E0E0E1}.page-events .event-card .event-card-header{position:relative;height:176px;background-size:contain !important;width:100%;border-radius:8px 8px 0 0}.page-events .event-card .event-card-title{position:absolute;bottom:32px;padding:0 32px;color:#F5F5F7;font-weight:bold;font-size:20px;line-height:28px}.page-events .event-card .event-card-body{padding:32px}.page-events .event-card .event-card-footer{padding:0 32px 32px}.page-events .event-card .event-card-footer .icon::before{height:24px;width:24px;content:"";margin-right:8px;background-size:contain;background-repeat:no-repeat}.page-events .event-card .icon-date::before{background:url(../img/events/event-date.svg)}.page-events .event-card .icon-location::before{background:url(../img/events/event-location.svg)}@media (min-width: 992px){.page-events .event-card{max-width:347px;margin:32px}.page-events .event-card-header{height:197px !important}}.page-events a.event-card:hover{transform:translateY(-16px);text-decoration:none}.page-events label{margin:0;padding-left:8px;color:#fff}.page-events .events-filter h6{font-size:16px}.page-events .events-filter{height:20px;width:20px}.page-events .events-filter[type="checkbox"]::before{position:relative;display:block;width:20px;height:20px;content:"";background:#111112;border-radius:4px;border-width:2px;border-style:solid;border-color:#A2A2A4}.page-events .events-filter[type="checkbox"]::after{position:relative;display:block;top:-20px;width:20px;height:20px;content:"";background-repeat:no-repeat;background-position:center;border-radius:4px;border-width:2px;border-style:solid;border-color:#A2A2A4}.page-events .events-filter[type="checkbox"]:checked::before{background:#111112;border:none;border-radius:0}.page-events .events-filter[type="checkbox"]:checked::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;background-color:#7919FF;border-width:2px;border-style:solid;border-color:#7919FF;border-radius:4px}.page-events .events-filter[type="checkbox"]:not(:disabled):checked:hover::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}.page-events .events-filter[type="checkbox"]:not(:disabled):hover::before{background:#111112;border:none;border-radius:0}.page-events .events-filter[type="checkbox"]:not(:disabled):hover::after{background:#111112;border:none;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}#find-us-on-platforms .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-light-blue-3.svg)}#find-us-on-platforms .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-purple-blue-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-magenta-3.svg)}#find-us-on-platforms .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-green-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(5) .card-footer{background-image:url(../img/cards/4col-orange-yellow-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(6) .card-footer{background-image:url(../img/cards/4col-blue-purple.svg)}#find-us-on-platforms .card-deck .card:nth-child(7) .card-footer{background-image:url(../img/cards/4col-yellow-2.svg)}#find-us-on-platforms .card-deck .card:nth-child(8) .card-footer{background-image:url(../img/cards/4col-orange-2.svg)}#find-us-on-platforms .card-deck .card{margin-bottom:2.5rem}.page-faq::before{background-image:url(../img/backgrounds/faq-bg.svg)}@media (min-width: 768px){.page-faq::before{background-size:contain}}@media (min-width: 992px){.page-faq .content{max-width:704px;margin-left:auto;margin-right:auto}}.page-faq .content h6:first-of-type{color:#32E685;margin-bottom:1rem;margin-top:2.5rem;font-size:1.25rem;line-height:26px;text-align:center}.page-faq .content h6:first-of-type .hover_anchor{display:none}@media (min-width: 992px){.page-faq .content h6:first-of-type{margin-top:6.5rem}}.page-faq .content h1:first-of-type{font-size:2.625rem;line-height:1.2;margin-top:0;margin-bottom:5rem;text-align:center}.page-faq .content h1:first-of-type .hover_anchor{display:none}@media (min-width: 992px){.page-faq .content h1:first-of-type{font-size:3.875rem;margin-bottom:13rem}}.page-faq h2{margin-top:13rem;font-size:2rem;line-height:2.375rem;text-align:center;font-weight:700}.page-faq .q-wrapper,.mini-faq .q-wrapper{background:#232325;border-radius:4px;padding:2rem;padding-right:3rem;margin-bottom:3.5rem;position:relative;z-index:5;width:100%;transform:translateY(0%)}.page-faq .q-wrapper p a,.mini-faq .q-wrapper p a{text-decoration:none;font-weight:600;color:#9A52FF}.page-faq .q-wrapper p a:hover,.mini-faq .q-wrapper p a:hover{text-decoration:underline}.page-faq .q-wrapper h4,.mini-faq .q-wrapper h4{font-size:1.25rem;line-height:1.625rem;margin-top:0}.page-faq .q-wrapper h4::before,.mini-faq .q-wrapper h4::before{display:block;content:" ";margin-top:-80px;height:80px;visibility:hidden}.page-faq .q-wrapper h4>a,.mini-faq .q-wrapper h4>a{text-decoration:none}.page-faq .q-wrapper h4>a:hover,.mini-faq .q-wrapper h4>a:hover{text-decoration:underline;color:#fff}@media (max-width: 991.98px){.page-faq .q-wrapper h4,.mini-faq .q-wrapper h4{font-size:1rem;line-height:1.5rem}}.page-faq .q-wrapper h4 .chevron,.mini-faq .q-wrapper h4 .chevron{position:absolute;top:40px;right:2rem}.page-docs-index::before{background-image:url(../../img/backgrounds/docs-splash.svg);background-position-x:right}.page-docs-index .center-search .input-group-text{height:56px;padding:0.75rem 0.75rem 0.75rem 1rem;line-height:2rem}.page-docs-index .center-search .ds-input{height:56px;padding:0.75rem 1rem 0.75rem 0.5rem}.page-docs-index #software-and-sdks .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-green.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-light-blue.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-orange.svg)}.page-docs-index #software-and-sdks .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-yellow.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-orange-yellow.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-magenta.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-blue-green.svg)}.page-docs-index #doc-types .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-light-blue-2.svg)}.page-docs-index #docs-hot-topic .longform{margin-top:2.5rem}.page-docs-index #community-heading,.page-community #community-heading{padding-top:2.5rem;padding-bottom:5rem;padding-left:1rem}@media (min-width: 992px){.page-docs-index #community-heading,.page-community #community-heading{padding-top:5rem;padding-bottom:15rem;padding-left:0}}@media (min-width: 1200px){.page-docs-index #community-heading,.page-community #community-heading{padding-bottom:25rem}}.page-docs-index #community-heading .parallax,.page-community #community-heading .parallax{position:absolute;-webkit-transition:all 0.1s ease;-moz-transition:all 0.1s ease;-ms-transition:all 0.1s ease;-o-transition:all 0.1s ease;transition:all 0.1s ease}.page-docs-index #community-heading .one,.page-community #community-heading .one{top:160px;left:0%}.page-docs-index #community-heading .two,.page-community #community-heading .two{top:439px;left:22%}.page-docs-index #community-heading .three,.page-community #community-heading .three{top:517px;left:52%}.page-docs-index #community-heading .four,.page-community #community-heading .four{top:322px;left:71%}.page-docs-index #community-heading .five,.page-community #community-heading .five{top:120px;right:0%}.page-docs-index #run-a-network-node .card-deck .card:nth-child(1) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-yellow-2.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(2) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-purple.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(3) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-magenta-2.svg)}.page-docs-index #run-a-network-node .card-deck .card:nth-child(4) .card-footer,.page-community #run-a-network-node .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-light-green.svg)}.page-docs-index #run-a-network-node,.page-community #run-a-network-node{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #run-a-network-node,.page-community #run-a-network-node{padding-top:104px;padding-bottom:104px}}.page-docs-index #run-a-network-node .text-cards,.page-community #run-a-network-node .text-cards{grid-gap:40px}.page-docs-index #run-a-network-node .text-cards h6::before,.page-community #run-a-network-node .text-cards h6::before{margin-top:0;height:unset}.page-docs-index #run-a-network-node .text-cards a,.page-community #run-a-network-node .text-cards a{font-size:1.25rem;line-height:26px;color:#fff;font-weight:bold}.page-docs-index #run-a-network-node .text-cards a:hover,.page-community #run-a-network-node .text-cards a:hover{text-decoration:none;background:none !important}.page-docs-index #run-a-network-node .text-cards .btn-arrow::after,.page-community #run-a-network-node .text-cards .btn-arrow::after{display:inline-block;content:url(../img/icons/arrow-right-purple.svg);vertical-align:middle;padding-left:8px;-webkit-transition:transform 0.3s ease-out;-moz-transition:transform 0.3s ease-out;-ms-transition:transform 0.3s ease-out;-o-transition:transform 0.3s ease-out;transition:transform 0.3s ease-out}.page-docs-index #xrpl-grants,.page-community #xrpl-grants{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-grants,.page-community #xrpl-grants{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-blog,.page-community #xrpl-blog{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-blog,.page-community #xrpl-blog{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-events,.page-community #xrpl-events{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-events,.page-community #xrpl-events{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-careers,.page-community #xrpl-careers{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-careers,.page-community #xrpl-careers{padding-top:104px;padding-bottom:104px}}.page-docs-index #xrpl-design-assets,.page-community #xrpl-design-assets{padding-bottom:5rem}@media (min-width: 768px){.page-docs-index #xrpl-design-assets,.page-community #xrpl-design-assets{padding-top:104px;padding-bottom:208px}}.page-community #platform-github{content:url("../img/logos/github.svg")}.page-community #platform-twitch{content:url("../img/logos/twitch.svg")}.page-community #platform-stack-overflow{content:url("../img/logos/stack-overflow.svg")}.page-community #platform-twitter{content:url("../img/logos/twitter.svg")}.page-community #platform-discord{content:url("../img/logos/discord.svg")}.page-community #platform-youtube{content:url("../img/logos/youtube.svg")}.page-community #platform-devto{content:url("../img/logos/devto.svg")}.page-references #refs-types .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/3col-orange-2.svg)}.page-references #refs-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/3col-green-2.svg)}.page-references #refs-types .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/3col-magenta.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/4col-light-blue-4.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/4col-blue-green-2.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(3) .card-footer{background-image:url(../img/cards/4col-yellow-3.svg)}.page-references #xrpl-protocol .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/4col-purple-blue.svg)}.page-dev-tools #xrp-explorer .card-footer{background-image:url("../img/cards/3-col-orange.svg")}.page-dev-tools #bithomp-explorer .card-footer{background-image:url("../img/cards/3-col-light-blue.svg")}.page-dev-tools #xrpscan .card-footer{background-image:url("../img/cards/3-col-pink.svg")}.page-dev-tools #token-list .card-footer{background-image:url("../img/cards/3-col-pink2.svg")}.page-dev-tools #websocket .card-footer{background-image:url("../img/cards/3-col-purple2.svg")}.page-dev-tools #rpc .card-footer{background-image:url("../img/cards/3-col-green.svg")}.page-dev-tools #technical-explorer .card-footer{background-image:url("../img/cards/3-col-purple-blue.svg")}.page-dev-tools #faucets .card-footer{background-image:url("../img/cards/3-col-pink2.svg")}.page-dev-tools #trasaction-sender .card-footer{background-image:url("../img/cards/3-col-light-blue2.svg")}.page-dev-tools #domain .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.page-dev-tools #xrp-ledger .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.page-dev-tools #binary-visualizer .card-footer{background-image:url("../img/cards/3-col-purple-blue.svg")}.page-dev-tools #token-metadata-lookup .card-footer{background-image:url("../img/cards/3-col-pink-purple.svg")}.page-dev-tools .nav-link{color:#A2A2A4;background-color:#111112;border-top:none;border-left:none;border-right:none;border-bottom-color:#454549}@media (max-width: 767.98px){.page-dev-tools .nav-tabs{display:flex;list-style:none;margin-left:0;padding-left:0;justify-content:space-between}.page-dev-tools .nav-item{display:inline-flex;width:auto;list-style:outside none none}.page-dev-tools .nav-link{display:inline-flex;width:auto;padding:1em 1em}}.page-dev-tools .nav-link.active{border-bottom-color:#9A52FF;color:#fff;font-weight:bold}.page-dev-tools .nav-tabs{border-bottom:1px solid #454549}.page-dev-tools .btn{padding:0.75rem}html.light .page-dev-tools .nav-link{background-color:#F5F5F7}html.light .page-dev-tools .nav-link.active{border-bottom-color:#9A52FF;color:#000;font-weight:bold}html.light .page-dev-tools .nav-link{color:#000}html.light .page-dev-tools #trasaction-sender .card-footer{background-image:url("../img/cards/3-col-light-blue-2.svg")}.rpc-tool #result{display:none}.rpc-tool #log{font-weight:700}.rpc-tool .content .json li{margin-top:0}.rpc-tool .json .name{color:#fff}.rpc-tool .json ul{margin:0;display:none}.rpc-tool .json li{padding:0;list-style-type:none}.rpc-tool .json .type-string .val{color:#28B86A}.rpc-tool .json .type-number .val{color:#19A3FF}.rpc-tool .json a.toggle:hover{text-decoration:none}.rpc-tool .json>a.toggle{display:none}.rpc-tool .json a.toggle:after{content:" +\0000a0";cursor:pointer}.rpc-tool .json>ul,.rpc-tool .json .expanded>ul{display:block}.rpc-tool .json .ellipsis{color:#838386}.rpc-tool .json>.ellipsis,.rpc-tool .json .expanded>.ellipsis{display:none}.rpc-tool .json .expanded>a.toggle:after{content:" \2212\0000a0"}.rpc-tool .json .indentafter{display:none}.rpc-tool .json .expanded>.indentafter{display:inline}.rpc-tool .tools{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:0.8em;margin:0 0 10px}.rpc-tool .tools>li>a{cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:6px 9px}.dev-blog .labels-wrap{display:inline-block}.dev-blog a.badge-primary{text-decoration:none}.dev-blog a.badge-primary:hover{text-decoration:none}#feedback-content .docked-widget{border:none !important;background-color:transparent !important;position:static !important;box-shadow:none !important;width:auto !important}#feedback-content .widget-form-wrapper{position:static !important;box-shadow:none !important;display:block;background-color:#232325 !important;border-width:0 !important;padding:24px !important;border-radius:8px !important}#feedback-content .widget-form-wrapper div{background-color:#232325 !important}#feedback-content .widget-form-wrapper textarea{background-color:#fff !important;opacity:1 !important;border:none !important;border-radius:4px !important;margin:0 !important;width:100% !important;color:#000 !important}#feedback-content .widget-form-wrapper .widget-header-title{background:none !important;flex-grow:0 !important;padding-right:1rem !important;height:auto !important;padding:0 !important;margin-bottom:10px !important}#feedback-content .widget-form-wrapper .widget-header-footer{background:none !important}#feedback-content .widget-form-wrapper .widget-form-footer{padding-right:0 !important}#feedback-content .widget-form-wrapper .submit{background-color:#7919FF !important;font-weight:bold !important;color:#fff !important;border:none !important;border-color:transparent !important;border-radius:4px !important;margin:0 !important;margin-top:8px !important}#feedback-content .widget-form-wrapper .submit:hover{background:#5F00E5 !important}#feedback-content .widget-form-wrapper .submit.disabled,#feedback-content .widget-form-wrapper .submit[disabled="disabled"]{background-color:#4A00B2 !important}#feedback-content .widget-form-wrapper .submit.disabled:hover,#feedback-content .widget-form-wrapper .submit[disabled="disabled"]:hover{background-color:#4A00B2 !important}#feedback-content .widget-form-wrapper .cancel{margin:0 !important;margin-top:8px !important;color:#B480FF !important;font-weight:600 !important}#feedback-content #closeFeedback{display:none}#feedback-content .widget-helpful .widget-header{background-color:#232325 !important;border-radius:8px !important}#feedback-content .widget-helpful .widget-header-title{color:#fff !important}.video-image{transition:all 0.35s ease-out;cursor:pointer}.video-image:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}#video-overlay{position:fixed;top:0;left:0;z-index:1190;height:100%;width:100%;background:#ffffff;opacity:0.6;display:none}#video{display:none;position:fixed;top:10%;left:15%;width:70%;z-index:1200}#video-container{position:relative;top:50%;left:50%;-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);max-width:982px;padding:0 20px}#videoWrapper{position:absolute;top:0;left:0;height:calc(90vh - 100px);width:80vw}#videoWrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}#video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.video-external-link{color:#9A52FF;font-weight:600}.video-external-link::after{content:"\00a0";background-image:url(../img/icons/arrow-up-right.svg);background-repeat:no-repeat;display:inline-block;background-size:24px;padding:9px 4px 0 8px;width:2rem;background-position:left 8px bottom 0px;transition:background-position 100ms ease-in-out}.video-external-link.video-external-link:hover::after{background-position:left 12px bottom 8px}.video-title{line-height:1.2}@media (min-width: 768px){.video-title{font-size:1rem}}.toml-checker #result{display:none}.toml-checker #verify-domain-result{display:none}.tutorial-content #beginner-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #beginner-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #sdk-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #use-cases-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #servers-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #servers-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #servers-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #servers-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #servers-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #servers-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #servers-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #servers-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+1) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+2) .card-footer{background-image:url("../img/cards/3col-magenta-orange.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+3) .card-footer{background-image:url("../img/cards/3col-green-blue.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+4) .card-footer{background-image:url("../img/cards/3col-orange.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+5) .card-footer{background-image:url("../img/cards/3col-purple.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+6) .card-footer{background-image:url("../img/cards/3-col-green-purple.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+7) .card-footer{background-image:url("../img/cards/3col-magenta.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+8) .card-footer{background-image:url("../img/cards/3col-light-green.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+9) .card-footer{background-image:url("../img/cards/3col-orange-yellow.svg")}.tutorial-content #businesses-cards .card:nth-child(9n+10) .card-footer{background-image:url("../img/cards/3-col-dark-blue.svg")}.tutorial-card-grid{grid-gap:16px !important;row-gap:0 !important}.tutorial-card-grid.card-grid.card-grid-3xN{grid-template-columns:1fr;grid-auto-rows:auto}@media (min-width: 1200px){.tutorial-card-grid.card-grid.card-grid-3xN{grid-template-columns:1fr 1fr 1fr}}.tutorial-card-grid.card-grid .card{margin-bottom:2.5rem;background-position:bottom;background-repeat:no-repeat;background-size:contain;padding:0;min-height:0}.tutorial-card-grid.card-grid .card .card-body{padding:32px}.tutorial-card-grid.card-grid .card .card-title{margin-bottom:16px;margin-top:0}.tutorial-card-grid.card-grid .card .card-title.external-link::after{background-size:0.9rem;vertical-align:middle;margin-left:12px;margin-bottom:12px;margin-right:10px;width:1.5rem}.tutorial-card-grid.card-grid .card .card-title.nav-link{padding:0}.tutorial-card-grid.card-grid .card .card-footer{font-size:0;padding:1rem;background-position:bottom;background-repeat:no-repeat;background-size:cover;border-top:0}.tutorial-card-grid.card-grid a{text-decoration:none}.tutorial-card-grid.card-grid code{color:#2DCF78;background-color:#0A2E1B;border-radius:4px;padding-left:4px;padding-right:4px}.tutorial-card-grid.card-grid .card-icon-container{width:50px;height:50px;background:#454549;display:flex;justify-content:center;align-items:center;border-radius:50%;margin-bottom:12px}.tutorial-card-grid.card-grid .card-icon-container img{width:70%;height:70%}.sdk-img{align-self:center}.light .sdk-img{content:url(../../img/graphics/sdk-white.png)}.light .ref-book-illustration{content:url(../../img/graphics/ref-book-light.png)}.light .tutorial-illustration{content:url(../../img/graphics/tutorials-illustration-light.png)}.light .concepts-doc-illustration{content:url(../../img/graphics/concepts-docs-light.png)}.light .use-cases .wallet-illustration{content:url(../../img/graphics/wallet-light.svg)}.light .use-cases .token-illustration{content:url(../../img/graphics/tokens-light.png)}.light .use-cases .connections-illustration{content:url(../../img/graphics/nodes-light.svg)}.light .quickstart-image{content:url(../../img/graphics/getting-started-pages-light.png)}.light .dev-tools-img{content:url(../../img/graphics/dev-tools-light.svg)}.light .dev-tools-link:hover p{color:#000}.dark .sdk-img{content:url(../../img/graphics/sdk-black.png)}.dark .ref-book-illustration{content:url(../../img/graphics/ref-book.png)}.dark .tutorial-illustration{content:url(../../img/graphics/tutorials-illustration.png)}.dark .concepts-doc-illustration{content:url(../../img/graphics/concepts-doc.png)}.dark .use-cases .wallet-illustration{content:url(../../img/graphics/wallet-dark.png)}.dark .use-cases .token-illustration{content:url(../../img/graphics/tokens-dark.png)}.dark .use-cases .connections-illustration{content:url(../../img/graphics/nodes-dark.png)}.dark .quickstart-image{content:url(../../img/graphics/getting-started-pages-dark.svg)}.dark .dev-tools-img{content:url(../../img/graphics/dev-tools-dark.png)}.dark .dev-tools-link:hover p{color:#fff}.dark .flat-card-grid .nav-link:hover{color:#E0E0E1}.get-started-img,.flat-card{max-width:100%;max-height:100%}.faded-text{font-family:'Work Sans';font-style:normal;font-weight:400;font-size:15.5667px;line-height:23px}.page-docs-index section{padding-top:64px;padding-bottom:64px}.page-docs-index .dev-tools-link h6::before{margin-top:-20px;height:20px}.page-docs-index .dev-tools-link h6:hover{text-decoration:underline;text-decoration-color:#9A52FF;background:none !important}.page-docs-index .dev-tools-link:hover p{text-decoration:none !important;background:none !important;display:inline-block}.page-docs-index .dev-tools-link a:hover{color:#9A52FF;text-decoration:none !important}.page-docs-index .dev-tools-link .btn-arrow::after{content:url(../img/icons/arrow-right-purple.svg);width:1.5rem;height:1.5rem}.page-docs-index .langs>a{display:block}.page-docs-index .langs h5:hover{text-decoration:underline;text-decoration-color:#9A52FF;background:none !important}.page-docs-index .langs a:hover{text-decoration:none !important}.page-docs-index .langs .btn-arrow::after{content:url(../img/icons/arrow-right-purple.svg);vertical-align:baseline;width:1.5rem;height:1.5rem}.page-docs-index .langs h5{margin-block-start:0 !important}.page-docs-index .langs h5::before{margin-top:0;height:0}.page-docs-index h1{font-size:3.875rem}.page-docs-index .arrow-purple::after{content:url(../img/icons/arrow-right-purple.svg)}.page-docs-index .documentation-index:hover,.page-docs-index .documentation-index::after{color:#9A52FF;text-decoration:none !important;background:none !important}@media (max-width: 765px){.page-docs-index h1{font-size:3rem}.page-docs-index .flat-card-grid{grid-gap:24px}.page-docs-index .flat-card-grid .flat-card{padding:32px 12px}.page-docs-index::before{display:none}}#langs-cards{grid-gap:40px}@media (max-width: 991.98px){.page-docs-index .langs-cards{grid-template-columns:1fr 1fr;grid-auto-rows:auto}}.dev-tools-img{max-width:100%;max-height:100%;margin:auto}.page-docs .h4::before{margin-top:0;height:0}.page-docs .row{margin-right:0;margin-left:0}.page-docs .video-grid{grid-gap:35px}.page-docs .title-space{margin-bottom:16px}.page-docs .circled-logo{margin-left:0.1rem}.flat-card-grid{grid-gap:15px;max-width:100%;min-height:384px}.flat-card-grid .flat-card{padding:32px 50px;height:100%;width:100%;box-shadow:none}.flat-card-grid .flat-card-padding{margin-bottom:75px}.flat-card-grid img{width:auto;height:115px;margin-left:auto;margin-right:auto}.flat-card-grid .nav-link{border:none !important}.flat-card-grid .nav-link:hover{text-decoration:underline;text-decoration-color:#9A52FF}.flat-card-grid .nav-link::after{content:none !important}@media (max-width: 991.98px){.flat-card-grid .flat-card-padding{margin-bottom:0}.flat-card-grid .nav-link::after{content:' ' !important}.flat-card-grid .flat-card .btn{display:none}}.float-up-on-hover{transition:all 0.35s ease-out;cursor:pointer}.float-up-on-hover:hover{-webkit-transform:translateY(-16px);-moz-transform:translateY(-16px);-ms-transform:translateY(-16px);-o-transform:translateY(-16px);transform:translateY(-16px)}.float-up-on-hover .video-image:hover{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}@media (min-width: 992px){.align-button-on-bottom .btn-primary{position:absolute;bottom:0}}.center-image{display:flex;justify-content:center}.quickstart-card .quickstart-image{margin-left:-20px;margin-right:-20px;margin-bottom:-20px}@media (min-width: 992px){.quickstart-card{margin-left:-32px;margin-right:-32px;margin-bottom:-32px;width:calc(100% + 64px)}}.explore-links .card-grid{grid-gap:40px}.full-documentation-link{margin-top:-35px}button.MarkpromptFloatingTrigger{bottom:4.5rem}html.light .MarkpromptContentDialog a{color:#7919FF}html.light .MarkpromptContentDialog h3:not(.chip){color:#000}.MarkpromptExtendedFeedbackTextInput{background-color:#fff;color:#000}.MarkpromptOverlay{z-index:20}html.light .content p code,html.light .content table code,html.light .content li>code{background-color:#E0E0E1;color:#111112}html.light body{background-color:#F5F5F7;color:#000}html.light #topnav-theme .custom-theme-toggle .custom-control-label::before{background-color:transparent;background-position:bottom right;transform:rotate(-15deg)}html.light h1:not(.chip),html.light h2:not(.chip),html.light h3:not(.chip),html.light h4:not(.chip),html.light h5:not(.chip),html.light h6:not(.chip),html.light .h1:not(.chip),html.light .h2:not(.chip),html.light .h3:not(.chip),html.light .h4:not(.chip),html.light .h5:not(.chip),html.light .h6:not(.chip){color:#000}html.light h1.green-500,html.light h2.green-500,html.light h3.green-500,html.light h4.green-500,html.light h5.green-500,html.light h6.green-500,html.light .h1.green-500,html.light .h2.green-500,html.light .h3.green-500,html.light .h4.green-500,html.light .h5.green-500,html.light .h6.green-500{color:#28B86A;text-shadow:white 0 0 2px, white -1px -1px 2px, white 1px 1px 2px}html.light .bg-grey-800{background-color:#FCFCFD}html.light .grey-400{color:#454549}html.light .text-muted{color:#232325 !important}html.light .longform{color:#232325}html.light .numbers{color:#000}html.light .stat-highlight,html.light .eyebrow{color:#111112}html.light .invertible-img{filter:invert(100%)}html.light .arrow-link::after{content:url("../img/lightmode/icon-long-arrow.svg")}html.light .search .input-group-text,html.light .input-group .input-group-text,html.light .form-group .input-group-text{background-color:#E0E0E1;color:#232325}html.light .search label .input-group-text,html.light .search .form-control:not(.btn),html.light .input-group label .input-group-text,html.light .input-group .form-control:not(.btn),html.light .form-group label .input-group-text,html.light .form-group .form-control:not(.btn){color:#000;background-color:#E0E0E1;border-color:#E0E0E1}html.light .search .ds-input,html.light .input-group .ds-input,html.light .form-group .ds-input{color:#000;background-color:#E0E0E1;border-color:#E0E0E1}html.light .search .ds-input:focus,html.light .input-group .ds-input:focus,html.light .form-group .ds-input:focus{border-color:#9A52FF}html.light .list-group-item{border-color:#232325;background-color:#F5F5F7}html.light .list-group-item.disabled{color:#A2A2A4}html.light .progress{background-color:#E0E0E1}html.light .xrp-ledger-dev-portal .DocSearch-Modal{background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Prefill{color:#7919FF}html.light .xrp-ledger-dev-portal .DocSearch-Button{background:var(--docsearch-searchbox-background)}html.light .xrp-ledger-dev-portal .DocSearch-Button:hover{box-shadow:inset 0 0 0 2px #7919FF;border-radius:40px;background:var(--docsearch-searchbox-background)}html.light .xrp-ledger-dev-portal .DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--docsearch-text-color)}html.light .xrp-ledger-dev-portal .DocSearch-Search-Icon{color:var(--docsearch-text-color) !important}html.light .xrp-ledger-dev-portal .DocSearch-Input{color:#111112}html.light .xrp-ledger-dev-portal .DocSearch-Hit-Select-Icon{color:#111112}html.light .xrp-ledger-dev-portal .DocSearch-Form{box-shadow:inset 0 0 0 2px #7919FF;background-color:var(--docsearch-searchbox-focus-background)}html.light .xrp-ledger-dev-portal .DocSearch-Hit-source{color:#7919FF;background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hits mark{color:#7919FF}html.light .xrp-ledger-dev-portal .DocSearch-Hit-Container{background:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hit a{background-color:#fff}html.light .xrp-ledger-dev-portal .DocSearch-Hit-content-wrapper .DocSearch-Hit-title{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit-content-wrapper .DocSearch-Hit-path{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Logo svg .cls-1,html.light .xrp-ledger-dev-portal .DocSearch-Logo svg .cls-2{fill:var(--docsearch-logo-color)}html.light .xrp-ledger-dev-portal .DocSearch-Hit-title,html.light .xrp-ledger-dev-portal .DocSearch-Hit-path,html.light .xrp-ledger-dev-portal .DocSearch-Label,html.light .xrp-ledger-dev-portal .DocSearch-Help{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a{background:#F5F5F7}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-Container{background-color:#F5F5F7}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-content-wrapper .DocSearch-Hit-title{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-content-wrapper .DocSearch-Hit-path{color:#454549 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-icon svg{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-action .DocSearch-Hit-action-button svg{color:#000 !important}html.light .xrp-ledger-dev-portal .DocSearch-Hit[aria-selected="true"] a mark{color:#7919FF !important}html.light .xrp-ledger-dev-portal .DocSearch-Footer{background:var(--docsearch-footer-background)}html.light .xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu [class^="ds-dataset-"]{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .ds-dropdown-menu::before{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion{background-color:#FCFCFD}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header{color:#000;border-bottom-color:#7919FF}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{color:#000}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--title{color:#000}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text{color:#232325}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#000;background-color:#C1C1C2}html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,html.light .xrp-ledger-dev-portal .algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{background-color:#C1C1C2}html.light a,html.light nav a{color:#000}html.light a.btn-primary,html.light nav a.btn-primary{color:#fff}html.light a.btn-primary:hover,html.light nav a.btn-primary:hover{color:#fff}html.light a:hover,html.light a:active,html.light a.active,html.light nav a:hover,html.light nav a:active,html.light nav a.active{color:#7919FF}html.light a:not(.btn):focus,html.light nav a:not(.btn):focus{background-color:transparent}html.light a.card:hover,html.light:active,html.light.active{color:#000}html.light .landing-table tbody td{color:#232325}html.light .btn-outline-secondary,html.light .content a.button,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary{color:#111112;border-color:#111112}html.light .btn-outline-secondary:not(:disabled):not(.disabled):hover,html.light .btn-outline-secondary:not(:disabled):not(.disabled):active,html.light .content a.button:not(:disabled):not(.disabled):hover,html.light .content a.button:not(:disabled):not(.disabled):active,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary:not(:disabled):not(.disabled):hover,html.light .navbar-dark .navbar-nav .nav-link.btn-outline-secondary:not(:disabled):not(.disabled):active{color:#9A52FF;border-color:#9A52FF;background-color:transparent}html.light .breadcrumb{background:#F5F5F7}html.light .breadcrumb-item a{color:#454549}html.light .breadcrumb-item a:hover{color:#9A52FF}html.light .top-nav{background:#F5F5F7}html.light .top-nav #topnav-pages .nav-link{color:#000}html.light .top-nav .navbar-brand .logo{content:url(../img/XRPLedger_DevPortal-black.svg);height:40px}html.light .top-nav #top-nav-hero-docs{content:url(../img/icons/lightmode/docs.svg)}html.light .top-nav #top-nav-hero-contribute{content:url(../img/icons/lightmode/contribute.svg)}html.light .top-nav .dropdown-menu{background-color:#F5F5F7;border-color:#F5F5F7;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .top-nav .dropdown-menu a:hover,html.light .top-nav .dropdown-menu a.active{color:#7919FF}html.light .top-nav .dropdown-menu .dropdown-item.dropdown-hero>img{background-color:#FCFCFD}html.light .top-nav .dropdown-menu .dropdown-item.dropdown-hero p{color:#343437}html.light .top-nav .dropdown-menu .dropdown-item.active{color:#7919FF}html.light .top-nav .dropdown-menu h5{color:#454549}html.light .top-nav .dropdown-menu .col-for-popular-pages,html.light .top-nav .dropdown-menu .col-for-人気ページ,html.light .top-nav .dropdown-menu .col-for-questions,html.light .top-nav .dropdown-menu .col-for-質問{background-color:#E0E0E1}@media (max-width: 991.98px){html.light .top-nav .navbar-toggler .navbar-toggler-icon::after,html.light .top-nav .navbar-toggler .navbar-toggler-icon::before,html.light .top-nav .navbar-toggler .navbar-toggler-icon div{background-color:#111112}html.light .top-nav .navbar-nav .nav-link,html.light .top-nav .navbar-collapse>.nav-item{background:#E0E0E1}}html.light aside .sidenav_cat_title{color:#000}html.light .page-toc .level-1 a,html.light .command-list .separator{color:#000}html.light aside a:hover,html.light aside .sidenav_cat_title:hover,html.light aside a.active,html.light aside a.active:hover,html.light aside .active>a,html.light aside .active>a:hover{color:#7919FF}html.light .dactyl-tree-nav nav{border-left:1px solid #000}html.light .dactyl-tree-nav nav .nav-link:hover,html.light .dactyl-tree-nav nav .nav-link:active{border-left-color:#7919FF}html.light .dactyl-tree-nav nav .active>.nav-link{border-left-color:#7919FF}html.light .page-toc,html.light .command-list{border-left:1px solid #000}html.light .page-toc .level-3,html.light .command-list .level-3{border-left:1px solid #000}html.light .page-toc li a:hover,html.light .page-toc li a .active,html.light .command-list li a:hover,html.light .command-list li a .active{border-left-color:#7919FF}html.light .footer-brand .logo{filter:invert(100%)}html.light .copyright-license{text-shadow:white 0px 0px 2px, white 1px 1px 2px, white 2px 2px 3px, white 2px 2px 4px, white 2px 2px 5px, white 2px 2px 6px, white -1px -1px 2px, white -2px -2px 3px, white -2px -2px 4px}html.light a.osano-cm-link{color:#ffffff}html.light .card,html.light .cta-card{color:#000;background-color:#FCFCFD;box-shadow:0px 5px 20px 0px #C1C1C2}html.light #code-samples-deck .card{box-shadow:0px 5px 20px 0px #C1C1C2}html.light #code-samples-deck .card-header{border-bottom:none;background-color:#FCFCFD}html.light #code-samples-deck .card-footer{background-color:#FCFCFD}html.light .page-faq.landing-builtin-bg::before,html.light .mini-faq.landing-builtin-bg::before{opacity:0.6}html.light .page-faq .q-wrapper,html.light .mini-faq .q-wrapper{background-color:#FCFCFD;color:#000;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .page-faq .q-wrapper>h4 a.expander:hover,html.light .mini-faq .q-wrapper>h4 a.expander:hover{color:#000}html.light .page-community #platform-stack-overflow{content:url("../img/logos/lightmode/stack-overflow.svg")}html.light .page-community #platform-discord{content:url("../img/logos/lightmode/discord.svg")}html.light .status.not_enabled{color:#AEB200}html.light .pg-category{color:#454549}html.light .landing .nav .nav-link{color:#232325;border-bottom-color:#C1C1C2}html.light .landing .circled-logo{background-color:#E0E0E1}html.light .landing .circled-logo img[src="assets/img/logos/globe.svg"]{filter:invert(100%)}html.light .landing p a,html.light .landing .longform a{color:#7919FF}html.light .devportal-callout.caution,html.light .devportal-callout.注意{border-color:#AEB200}html.light .devportal-callout.caution>strong:first-child::before,html.light .devportal-callout.注意>strong:first-child::before{color:#AEB200}html.light .devportal-callout.tip,html.light .devportal-callout.ヒント{border-color:#2DCF78}html.light .devportal-callout.tip>strong:first-child::before,html.light .devportal-callout.ヒント>strong:first-child::before{color:#2DCF78}html.light code{color:#000}html.light pre code{color:#FCFCFD}html.light .multicode a{color:#000}html.light .multicode a.current{color:#fff}html.light .multicode a:hover{text-decoration:none;background-color:#E0E0E1;color:#fff}html.light .multicode a:focus{background-color:#232325}html.light .codehilite .btn-outline-secondary{background-color:#232325;color:#F5F5F7;border-color:#F5F5F7}html.light .interactive-block .breadcrumb-item.done a::after{color:#145C35}html.light .modal-content{background-color:#FCFCFD}html.light .rpc-tool pre .toggle{color:#fff}html.light .rpc-tool pre .toggle:hover{color:#B480FF}html.light .page-home #home-hero-graphic{content:url("../img/lightmode/home-hero.svg")}html.light .page-home #benefits-list #public{content:url("../img/icons/lightmode/public.svg")}html.light .page-home #benefits-list #streamlined{content:url("../img/icons/lightmode/streamlined.svg")}html.light .page-home #benefits-list #performance{content:url("../img/icons/lightmode/performance.svg")}html.light .page-home #benefits-list #low-cost{content:url("../img/icons/lightmode/low-cost.svg")}html.light .page-home #benefits-list #community{content:url("../img/icons/lightmode/community.svg")}html.light .page-home #benefits-list #reliability{content:url("../img/icons/lightmode/reliability.svg")}html.light #validator-graphic{content:url("../img/lightmode/validators.svg")}html.light #wallets #wallet-xumm{content:url("../img/wallets/lightmode/xumm.svg")}html.light #wallets #wallet-bitfrost{content:url("../img/wallets/lightmode/bitfrost.png")}html.light #wallets #wallet-towo{content:url("../img/wallets/lightmode/towo.svg")}html.light #wallets #wallet-keystone{content:url("../img/wallets/lightmode/keystone.svg")}html.light #wallets #wallet-dcent{content:url("../img/wallets/lightmode/dcent.svg")}html.light #top-exchanges #exch-bitstamp{content:url("../img/exchanges/lightmode/bitstamp.svg")}html.light #top-exchanges #exch-cex-io{content:url("../img/exchanges/lightmode/cex-io.svg")}html.light #top-exchanges #exch-liquid{content:url("../img/exchanges/lightmode/liquid.svg")}html.light #top-exchanges #exch-bitfinex{content:url("../img/exchanges/lightmode/bitfinex.svg")}html.light #top-exchanges #exch-bittrex{content:url("../img/exchanges/lightmode/bittrex.png")}html.light #top-exchanges #exch-currency-com{content:url("../img/exchanges/lightmode/currency-com.png")}html.light #top-exchanges #exch-ftx{content:url("../img/exchanges/lightmode/ftx.png")}html.light #top-exchanges #exch-lmax{content:url("../img/exchanges/lightmode/lmax.png")}html.light .timeline-dot{background-color:#F5F5F7}html.light .page-uses .card-body{background:#fff;color:#343437}html.light .page-uses .modal-footer,html.light .page-uses .modal-header{background-color:#FCFCFD}html.light .page-uses #infrastructure{content:url("../img/icons/usecases/lightmode/ic_infrastructure.png")}html.light .page-uses #developer_tooling{content:url("../img/icons/usecases/lightmode/ic_developer_tooling.png")}html.light .page-uses #interoperability{content:url("../img/icons/usecases/lightmode/ic_interoperability.png")}html.light .page-uses #wallet{content:url("../img/icons/usecases/lightmode/ic_wallet.png")}html.light .page-uses #nfts{content:url("../img/icons/usecases/lightmode/ic_nfts.png")}html.light .page-uses #exchanges{content:url("../img/icons/usecases/lightmode/ic_exchanges.png")}html.light .page-uses #gaming{content:url("../img/icons/usecases/lightmode/ic_gaming.png")}html.light .page-uses #security{content:url("../img/icons/usecases/lightmode/ic_security.png")}html.light .page-uses #payments{content:url("../img/icons/usecases/lightmode/ic_payments.png")}html.light .page-uses #web_monetization{content:url("../img/icons/usecases/lightmode/ic_web_monetization.png")}html.light .page-uses #sustainability{content:url("../img/icons/usecases/lightmode/ic_sustainability.png")}html.light .page-uses #cbdc{content:url("../img/icons/usecases/lightmode/ic_cbdc.png")}html.light .page-uses #custody{content:url("../img/icons/usecases/lightmode/ic_custody.png")}html.light .page-uses #other{content:url("../img/icons/usecases/lightmode/ic_other.png")}html.light .page-uses #carbon_markets{content:url("../img/icons/usecases/lightmode/ic_carbon_markets.png")}html.light .page-uses #defi{content:url("../img/icons/usecases/lightmode/ic_defi.png")}html.light .page-uses .category-header{color:#343437}html.light .page-uses .category_count{background:#D2B2FF;color:#350080}html.light .page-uses .section-text-title{color:#000}html.light .page-uses #use_case_companies_list #bitgo .biz-logo{max-height:40px;content:url("../img/uses/lightmode/bitgo.svg")}html.light .page-uses #use_case_companies_list #sologenic-nft .biz-logo{max-height:40px;content:url("../img/uses/lightmode/sologenic-nft.svg")}html.light .page-uses #use_case_companies_list #carbonland-trust .biz-logo{max-height:40px;content:url("../img/uses/lightmode/carbonland-trust.svg")}html.light .page-uses #use_case_companies_list #x-tokenize .biz-logo{max-height:40px;content:url("../img/uses/lightmode/x-tokenize.svg")}html.light .page-uses #use_case_companies_list #casino-coin .biz-logo{max-height:40px;content:url("../img/uses/lightmode/casino-coin.svg")}html.light .page-uses #use_case_companies_list #xrp-cafe .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrp-cafe.svg")}html.light .page-uses #use_case_companies_list #coil .biz-logo{max-height:40px;content:url("../img/uses/lightmode/coil.svg")}html.light .page-uses #use_case_companies_list #xrp-toolkit .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrp-toolkit.svg")}html.light .page-uses #use_case_companies_list #cryptum .biz-logo{max-height:40px;content:url("../img/uses/lightmode/cryptum.svg")}html.light .page-uses #use_case_companies_list #xrpl-org-ledger-explorer .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpl-org-ledger-explorer.svg")}html.light .page-uses #use_case_companies_list #evernode .biz-logo{max-height:40px;content:url("../img/uses/lightmode/evernode.svg")}html.light .page-uses #use_case_companies_list #xrpl-rosetta .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpl-rosetta.svg")}html.light .page-uses #use_case_companies_list #ripples-cbdc-platform .biz-logo{max-height:40px;content:url("../img/uses/lightmode/ripples-cbdc-platform.svg")}html.light .page-uses #use_case_companies_list #xrpscan .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xrpscan.svg")}html.light .page-uses #use_case_companies_list #ripples-on-demand-liquidity .biz-logo{max-height:40px;content:url("../img/uses/lightmode/ripples-on-demand-liquidity.svg")}html.light .page-uses #use_case_companies_list #xumm-wallet .biz-logo{max-height:40px;content:url("../img/uses/lightmode/xumm-wallet.svg")}html.light .page-uses #use_case_companies_list #sologenic-dex .biz-logo{max-height:40px;content:url("../img/uses/lightmode/sologenic-dex.svg")}html.light .page-uses #use_case_companies_list #Crossmark .biz-logo{max-height:40px;content:url("../img/uses/lightmode/Crossmark.png")}html.light .page-uses #use_case_companies_list #threezy .biz-logo{max-height:40px;content:url("../img/uses/lightmode/threezy.png")}html.light .page-uses #bitpay .biz-logo,html.light .page-uses #forte .biz-logo,html.light .page-uses #xrplorer .biz-logo,html.light .page-uses #gatehub .biz-logo{filter:invert(100%)}html.light .landing-bg{opacity:0.4}@media (min-width: 768px){html.light .landing-bg{opacity:1}}html.light .landing-builtin-bg::before{opacity:0.4}@media (min-width: 768px){html.light .landing-builtin-bg::before{opacity:1}}html.light #feedback-content .widget-form-wrapper{background-color:#fff !important}html.light #feedback-content .widget-form-wrapper div{background-color:#fff !important}html.light #feedback-content .widget-form-wrapper textarea{background-color:#F5F5F7 !important}html.light #feedback-content .widget-form-wrapper .widget-header-title{color:#111112 !important}html.light #feedback-content .widget-form-wrapper .cancel{color:#7919FF !important}html.light #feedback-content .widget-helpful .widget-header{background-color:#fff !important}html.light #feedback-content .widget-helpful .widget-header-title{color:#111112 !important}html.light #feedback-content .widget-helpful .widget-header-icon{filter:invert(100%)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/lightmode/4col-green.svg)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue.svg)}html.light .page-docs-index #software-and-sdks .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-yellow.svg)}html.light .page-docs-index #doc-types .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-2.svg)}html.light .page-docs-index #run-a-network-node .card-deck .card:nth-child(4) .card-footer,html.light .page-community #run-a-network-node .card-deck .card:nth-child(4) .card-footer{background-image:url(../img/cards/lightmode/4col-light-green.svg)}html.light .page-docs-index #run-a-network-node .text-cards a,html.light .page-community #run-a-network-node .text-cards a{color:#000}html.light .page-docs-index #xrpl-blog .blog-graphic,html.light .page-community #xrpl-blog .blog-graphic{content:url(../img/community/lightmode/community-blog@2x.png)}html.light .page-docs-index #xrpl-events .text-light,html.light .page-community #xrpl-events .text-light{color:#000 !important}html.light .page-docs-index #xrplGrantsDark,html.light .page-docs-index #xrplGrantsDark-small,html.light .page-docs-index #careersDark,html.light .page-docs-index #careersDark-small,html.light .page-community #xrplGrantsDark,html.light .page-community #xrplGrantsDark-small,html.light .page-community #careersDark,html.light .page-community #careersDark-small{filter:invert(100%) brightness(0.8)}html.light #find-us-on-platforms .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-3.svg)}html.light .page-references #refs-types .card-deck .card:nth-child(2) .card-footer{background-image:url(../img/cards/lightmode/3col-green-2.svg)}html.light .page-references #xrpl-protocol .card-deck .card:nth-child(1) .card-footer{background-image:url(../img/cards/lightmode/4col-light-blue-4.svg)}html.light ::-webkit-input-placeholder{color:#454549}html.light :-ms-input-placeholder{color:#454549}html.light ::-moz-placeholder{color:#454549;opacity:1}html.light :-moz-placeholder{color:#454549;opacity:1}html.light .page-events label{color:#111112}html.light .page-events .event-card{color:#000;background-color:#FCFCFD;box-shadow:0px 5px 20px 0px #C1C1C2}html.light .page-events a.event-card:hover{color:#000}html.light .page-events .event-hero{color:#111112}html.light .page-events .event-save-date{color:#111112}html.light .page-events .event-small-gray{color:#454549}html.light .page-events #event-hero-image{height:100%;min-height:209px;background:url(../img/events/event-hero1-light@2x.png);background-size:contain;background-repeat:no-repeat;background-position:center}html.light .page-events .icon-date::before{background:url(../img/events/event-date-light.svg)}html.light .page-events .icon-location::before{background:url(../img/events/event-location-light.svg)}html.light .page-events .events-filter[type="checkbox"]::before{background-color:#F5F5F7}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):checked:hover::after{background-image:url(../img/events/event-check.svg);background-repeat:no-repeat;background-position:center;background-color:#5F00E5;border-width:2px;border-style:solid;border-color:#5F00E5;border-radius:4px}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):hover::before{background-color:#F5F5F7}html.light .page-events .events-filter[type="checkbox"]:not(:disabled):hover::after{background-color:#F5F5F7}html.light .page-ambassadors #benefits-list #benefits-01{content:url("../img/ambassadors/lightmode/benefits-01.svg")}html.light .page-ambassadors #benefits-list #benefits-02{content:url("../img/ambassadors/lightmode/benefits-02.svg")}html.light .page-ambassadors #benefits-list #benefits-03{content:url("../img/ambassadors/lightmode/benefits-03.svg")}html.light .page-ambassadors #benefits-list #benefits-04{content:url("../img/ambassadors/lightmode/benefits-04.svg")}html.light .page-ambassadors #benefits-list #benefits-05{content:url("../img/ambassadors/lightmode/benefits-05.svg")}html.light .page-ambassadors #benefits-list #benefits-06{content:url("../img/ambassadors/lightmode/benefits-06.svg")}html.light .page-ambassadors #eligibility-list #eligibility-01{content:url("../img/ambassadors/lightmode/eligibility-01.svg")}html.light .page-ambassadors #eligibility-list #eligibility-02{content:url("../img/ambassadors/lightmode/eligibility-02.svg")}html.light .page-ambassadors #eligibility-list #eligibility-03{content:url("../img/ambassadors/lightmode/eligibility-03.svg")}html.light .page-ambassadors #eligibility-list #eligibility-04{content:url("../img/ambassadors/lightmode/eligibility-04.svg")}html.light .page-ambassadors #eligibility-list #eligibility-05{content:url("../img/ambassadors/lightmode/eligibility-05.svg")}html.light .page-funding .funding-list #funding-01{content:url("../img/funding/lightmode/funding-01.svg")}html.light .page-funding .funding-list #funding-02{content:url("../img/funding/lightmode/funding-02.svg")}html.light .page-funding .funding-list #funding-03{content:url("../img/funding/lightmode/funding-03.svg")}html.light .page-funding .funding-list #funding-04{content:url("../img/funding/lightmode/funding-04.svg")}html.light .page-funding #xrplGrantsDark{filter:invert(100%) brightness(0.8)}html.light .page-impact .connect-list #connect-01{content:url("../img/impact/lightmode/connect-01.svg")}html.light .page-impact .connect-list #connect-02{content:url("../img/impact/lightmode/connect-02.svg")}html.light .page-impact .connect-list #connect-03{content:url("../img/impact/lightmode/connect-03.svg")}html.light .page-impact .connect-list #connect-04{content:url("../img/impact/lightmode/connect-04.svg")}html.light .page-impact #map-light{display:block}html.light .page-impact #map-dark{display:none}html.light .tutorial-card-grid code{background-color:#D6FAE7}html.light .tutorial-card-grid .card-icon-container{background:#C1C1C2}html.light .footer-nav .nav-item{text-shadow:#F5F5F7 0px 0px 2px, #F5F5F7 1px 1px 2px, #F5F5F7 2px 2px 3px, #F5F5F7 2px 2px 4px, #F5F5F7 2px 2px 5px, #F5F5F7 2px 2px 6px, #F5F5F7 -1px -1px 2px, #F5F5F7 -2px -2px 3px, #F5F5F7 -2px -2px 4px} diff --git a/assets/img/events/paris.png b/assets/img/events/paris.png new file mode 100644 index 0000000000..da8066a70e Binary files /dev/null and b/assets/img/events/paris.png differ diff --git a/assets/img/events/singapore.png b/assets/img/events/singapore.png new file mode 100644 index 0000000000..a0b78fe04d Binary files /dev/null and b/assets/img/events/singapore.png differ diff --git a/assets/img/icons/usecases/ic_carbon_markets.png b/assets/img/icons/usecases/ic_carbon_markets.png new file mode 100644 index 0000000000..2dba0b41c2 Binary files /dev/null and b/assets/img/icons/usecases/ic_carbon_markets.png differ diff --git a/assets/img/icons/usecases/ic_other.png b/assets/img/icons/usecases/ic_other.png new file mode 100644 index 0000000000..58e2533df0 Binary files /dev/null and b/assets/img/icons/usecases/ic_other.png differ diff --git a/assets/img/icons/usecases/lightmode/ic_carbon_markets.png b/assets/img/icons/usecases/lightmode/ic_carbon_markets.png new file mode 100644 index 0000000000..1ebe7400c9 Binary files /dev/null and b/assets/img/icons/usecases/lightmode/ic_carbon_markets.png differ diff --git a/assets/img/icons/usecases/lightmode/ic_other.png b/assets/img/icons/usecases/lightmode/ic_other.png new file mode 100644 index 0000000000..96fc1254f9 Binary files /dev/null and b/assets/img/icons/usecases/lightmode/ic_other.png differ diff --git a/assets/img/uses/Crossmark.png b/assets/img/uses/Crossmark.png new file mode 100644 index 0000000000..0b480247dd Binary files /dev/null and b/assets/img/uses/Crossmark.png differ diff --git a/assets/img/uses/Edge.png b/assets/img/uses/Edge.png new file mode 100644 index 0000000000..84847789c9 Binary files /dev/null and b/assets/img/uses/Edge.png differ diff --git a/assets/img/uses/infrastructure.png b/assets/img/uses/infrastructure.png new file mode 100644 index 0000000000..db941e8944 Binary files /dev/null and b/assets/img/uses/infrastructure.png differ diff --git a/assets/img/uses/left-arrow-light.svg b/assets/img/uses/left-arrow-light.svg new file mode 100644 index 0000000000..8cbf2ed265 --- /dev/null +++ b/assets/img/uses/left-arrow-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/uses/left-arrow.png b/assets/img/uses/left-arrow.png new file mode 100644 index 0000000000..809731690e Binary files /dev/null and b/assets/img/uses/left-arrow.png differ diff --git a/assets/img/uses/left-arrow.svg b/assets/img/uses/left-arrow.svg new file mode 100644 index 0000000000..9fce7dd073 --- /dev/null +++ b/assets/img/uses/left-arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/uses/lightmode/aesthetes.png b/assets/img/uses/lightmode/aesthetes.png new file mode 100644 index 0000000000..c1fc79b0b0 Binary files /dev/null and b/assets/img/uses/lightmode/aesthetes.png differ diff --git a/assets/img/uses/lightmode/allbridge.png b/assets/img/uses/lightmode/allbridge.png new file mode 100644 index 0000000000..1d1ea31f08 Binary files /dev/null and b/assets/img/uses/lightmode/allbridge.png differ diff --git a/assets/img/uses/lightmode/anchain.png b/assets/img/uses/lightmode/anchain.png new file mode 100644 index 0000000000..63ef1f7c1b Binary files /dev/null and b/assets/img/uses/lightmode/anchain.png differ diff --git a/assets/img/uses/lightmode/audiotarky.png b/assets/img/uses/lightmode/audiotarky.png new file mode 100644 index 0000000000..40fbb82925 Binary files /dev/null and b/assets/img/uses/lightmode/audiotarky.png differ diff --git a/assets/img/uses/lightmode/bitfrost.png b/assets/img/uses/lightmode/bitfrost.png new file mode 100644 index 0000000000..68ee2a7898 Binary files /dev/null and b/assets/img/uses/lightmode/bitfrost.png differ diff --git a/assets/img/uses/lightmode/bitgo.png b/assets/img/uses/lightmode/bitgo.png new file mode 100644 index 0000000000..792ba3bc37 Binary files /dev/null and b/assets/img/uses/lightmode/bitgo.png differ diff --git a/assets/img/uses/lightmode/bithomp.png b/assets/img/uses/lightmode/bithomp.png new file mode 100644 index 0000000000..21f6d7cf1d Binary files /dev/null and b/assets/img/uses/lightmode/bithomp.png differ diff --git a/assets/img/uses/lightmode/blockforce.png b/assets/img/uses/lightmode/blockforce.png new file mode 100644 index 0000000000..d5785fce15 Binary files /dev/null and b/assets/img/uses/lightmode/blockforce.png differ diff --git a/assets/img/uses/lightmode/carbonland-trust.png b/assets/img/uses/lightmode/carbonland-trust.png new file mode 100644 index 0000000000..02556045e3 Binary files /dev/null and b/assets/img/uses/lightmode/carbonland-trust.png differ diff --git a/assets/img/uses/lightmode/casino-coin.png b/assets/img/uses/lightmode/casino-coin.png new file mode 100644 index 0000000000..a74f1e728c Binary files /dev/null and b/assets/img/uses/lightmode/casino-coin.png differ diff --git a/assets/img/uses/lightmode/crossmark.png b/assets/img/uses/lightmode/crossmark.png new file mode 100644 index 0000000000..6dbbcb97d5 Binary files /dev/null and b/assets/img/uses/lightmode/crossmark.png differ diff --git a/assets/img/uses/lightmode/cryptum.jpg b/assets/img/uses/lightmode/cryptum.jpg new file mode 100644 index 0000000000..624beb6ade Binary files /dev/null and b/assets/img/uses/lightmode/cryptum.jpg differ diff --git a/assets/img/uses/lightmode/edge.png b/assets/img/uses/lightmode/edge.png new file mode 100644 index 0000000000..84847789c9 Binary files /dev/null and b/assets/img/uses/lightmode/edge.png differ diff --git a/assets/img/uses/lightmode/evernode.png b/assets/img/uses/lightmode/evernode.png new file mode 100644 index 0000000000..5bb73cd4c8 Binary files /dev/null and b/assets/img/uses/lightmode/evernode.png differ diff --git a/assets/img/uses/lightmode/forte.png b/assets/img/uses/lightmode/forte.png new file mode 100644 index 0000000000..a8e7fa96e5 Binary files /dev/null and b/assets/img/uses/lightmode/forte.png differ diff --git a/assets/img/uses/lightmode/futureverse.png b/assets/img/uses/lightmode/futureverse.png new file mode 100644 index 0000000000..6bf8736461 Binary files /dev/null and b/assets/img/uses/lightmode/futureverse.png differ diff --git a/assets/img/uses/lightmode/gatehub.png b/assets/img/uses/lightmode/gatehub.png new file mode 100644 index 0000000000..364a1e29a4 Binary files /dev/null and b/assets/img/uses/lightmode/gatehub.png differ diff --git a/assets/img/uses/lightmode/gem-wallet.png b/assets/img/uses/lightmode/gem-wallet.png new file mode 100644 index 0000000000..951754a45e Binary files /dev/null and b/assets/img/uses/lightmode/gem-wallet.png differ diff --git a/assets/img/uses/lightmode/ledger-city.png b/assets/img/uses/lightmode/ledger-city.png new file mode 100644 index 0000000000..3bc31c5607 Binary files /dev/null and b/assets/img/uses/lightmode/ledger-city.png differ diff --git a/assets/img/uses/lightmode/momento.png b/assets/img/uses/lightmode/momento.png new file mode 100644 index 0000000000..f1a1e8bf39 Binary files /dev/null and b/assets/img/uses/lightmode/momento.png differ diff --git a/assets/img/uses/lightmode/multichain.png b/assets/img/uses/lightmode/multichain.png new file mode 100644 index 0000000000..b08a005345 Binary files /dev/null and b/assets/img/uses/lightmode/multichain.png differ diff --git a/assets/img/uses/lightmode/nftmaster.png b/assets/img/uses/lightmode/nftmaster.png new file mode 100644 index 0000000000..2c5a7c2225 Binary files /dev/null and b/assets/img/uses/lightmode/nftmaster.png differ diff --git a/assets/img/uses/lightmode/onthedex.png b/assets/img/uses/lightmode/onthedex.png new file mode 100644 index 0000000000..765a62cf1c Binary files /dev/null and b/assets/img/uses/lightmode/onthedex.png differ diff --git a/assets/img/uses/lightmode/onxrp.png b/assets/img/uses/lightmode/onxrp.png new file mode 100644 index 0000000000..905986b818 Binary files /dev/null and b/assets/img/uses/lightmode/onxrp.png differ diff --git a/assets/img/uses/lightmode/peerkat.png b/assets/img/uses/lightmode/peerkat.png new file mode 100644 index 0000000000..5e9a1a39ee Binary files /dev/null and b/assets/img/uses/lightmode/peerkat.png differ diff --git a/assets/img/uses/lightmode/ripple.png b/assets/img/uses/lightmode/ripple.png new file mode 100644 index 0000000000..c3945d8701 Binary files /dev/null and b/assets/img/uses/lightmode/ripple.png differ diff --git a/assets/img/uses/lightmode/rootmaker.png b/assets/img/uses/lightmode/rootmaker.png new file mode 100644 index 0000000000..79bf925e4d Binary files /dev/null and b/assets/img/uses/lightmode/rootmaker.png differ diff --git a/assets/img/uses/lightmode/sologenic_dex.png b/assets/img/uses/lightmode/sologenic_dex.png new file mode 100644 index 0000000000..3c81a91a78 Binary files /dev/null and b/assets/img/uses/lightmode/sologenic_dex.png differ diff --git a/assets/img/uses/lightmode/styngr.png b/assets/img/uses/lightmode/styngr.png new file mode 100644 index 0000000000..25806897f0 Binary files /dev/null and b/assets/img/uses/lightmode/styngr.png differ diff --git a/assets/img/uses/lightmode/supermojo.png b/assets/img/uses/lightmode/supermojo.png new file mode 100644 index 0000000000..cdac7d6a02 Binary files /dev/null and b/assets/img/uses/lightmode/supermojo.png differ diff --git a/assets/img/uses/lightmode/threezy.png b/assets/img/uses/lightmode/threezy.png new file mode 100644 index 0000000000..80cec4c83d Binary files /dev/null and b/assets/img/uses/lightmode/threezy.png differ diff --git a/assets/img/uses/lightmode/tokenize.png b/assets/img/uses/lightmode/tokenize.png new file mode 100644 index 0000000000..2f3bc82d44 Binary files /dev/null and b/assets/img/uses/lightmode/tokenize.png differ diff --git a/assets/img/uses/lightmode/towolabs.png b/assets/img/uses/lightmode/towolabs.png new file mode 100644 index 0000000000..ba3e5a619a Binary files /dev/null and b/assets/img/uses/lightmode/towolabs.png differ diff --git a/assets/img/uses/lightmode/xpmarket.png b/assets/img/uses/lightmode/xpmarket.png new file mode 100644 index 0000000000..7b4d305a4c Binary files /dev/null and b/assets/img/uses/lightmode/xpmarket.png differ diff --git a/assets/img/uses/lightmode/xrp-cafe.png b/assets/img/uses/lightmode/xrp-cafe.png new file mode 100644 index 0000000000..e2c778f7be Binary files /dev/null and b/assets/img/uses/lightmode/xrp-cafe.png differ diff --git a/assets/img/uses/lightmode/xrp-ledger.png b/assets/img/uses/lightmode/xrp-ledger.png new file mode 100644 index 0000000000..1b6e1b914e Binary files /dev/null and b/assets/img/uses/lightmode/xrp-ledger.png differ diff --git a/assets/img/uses/lightmode/xrp-toolkit.png b/assets/img/uses/lightmode/xrp-toolkit.png new file mode 100644 index 0000000000..9aef038ab4 Binary files /dev/null and b/assets/img/uses/lightmode/xrp-toolkit.png differ diff --git a/assets/img/uses/lightmode/xrpscan.png b/assets/img/uses/lightmode/xrpscan.png new file mode 100644 index 0000000000..6d8019e6af Binary files /dev/null and b/assets/img/uses/lightmode/xrpscan.png differ diff --git a/assets/img/uses/lightmode/xumm.png b/assets/img/uses/lightmode/xumm.png new file mode 100644 index 0000000000..a2c6c1ba10 Binary files /dev/null and b/assets/img/uses/lightmode/xumm.png differ diff --git a/assets/img/uses/modallogos/Momento.png b/assets/img/uses/modallogos/Momento.png new file mode 100644 index 0000000000..5554ec7d7f Binary files /dev/null and b/assets/img/uses/modallogos/Momento.png differ diff --git a/assets/img/uses/modallogos/aesthetes.png b/assets/img/uses/modallogos/aesthetes.png new file mode 100644 index 0000000000..e6ba3875a9 Binary files /dev/null and b/assets/img/uses/modallogos/aesthetes.png differ diff --git a/assets/img/uses/modallogos/allbridge.png b/assets/img/uses/modallogos/allbridge.png new file mode 100644 index 0000000000..47a24c9286 Binary files /dev/null and b/assets/img/uses/modallogos/allbridge.png differ diff --git a/assets/img/uses/modallogos/anchain.png b/assets/img/uses/modallogos/anchain.png new file mode 100644 index 0000000000..63ef1f7c1b Binary files /dev/null and b/assets/img/uses/modallogos/anchain.png differ diff --git a/assets/img/uses/modallogos/audiotarky.png b/assets/img/uses/modallogos/audiotarky.png new file mode 100644 index 0000000000..40fbb82925 Binary files /dev/null and b/assets/img/uses/modallogos/audiotarky.png differ diff --git a/assets/img/uses/modallogos/bitfrost.png b/assets/img/uses/modallogos/bitfrost.png new file mode 100644 index 0000000000..7dbcea9a66 Binary files /dev/null and b/assets/img/uses/modallogos/bitfrost.png differ diff --git a/assets/img/uses/modallogos/bitgo.png b/assets/img/uses/modallogos/bitgo.png new file mode 100644 index 0000000000..f3292af37d Binary files /dev/null and b/assets/img/uses/modallogos/bitgo.png differ diff --git a/assets/img/uses/modallogos/bithomp.png b/assets/img/uses/modallogos/bithomp.png new file mode 100644 index 0000000000..21f6d7cf1d Binary files /dev/null and b/assets/img/uses/modallogos/bithomp.png differ diff --git a/assets/img/uses/modallogos/blockforce.png b/assets/img/uses/modallogos/blockforce.png new file mode 100644 index 0000000000..587983fd12 Binary files /dev/null and b/assets/img/uses/modallogos/blockforce.png differ diff --git a/assets/img/uses/modallogos/carbonland-trust.png b/assets/img/uses/modallogos/carbonland-trust.png new file mode 100644 index 0000000000..053faf783c Binary files /dev/null and b/assets/img/uses/modallogos/carbonland-trust.png differ diff --git a/assets/img/uses/modallogos/casino-coin.png b/assets/img/uses/modallogos/casino-coin.png new file mode 100644 index 0000000000..8e16925966 Binary files /dev/null and b/assets/img/uses/modallogos/casino-coin.png differ diff --git a/assets/img/uses/modallogos/crossmark.png b/assets/img/uses/modallogos/crossmark.png new file mode 100644 index 0000000000..0b480247dd Binary files /dev/null and b/assets/img/uses/modallogos/crossmark.png differ diff --git a/assets/img/uses/modallogos/cryptum.png b/assets/img/uses/modallogos/cryptum.png new file mode 100644 index 0000000000..ab8481e754 Binary files /dev/null and b/assets/img/uses/modallogos/cryptum.png differ diff --git a/assets/img/uses/modallogos/edge.png b/assets/img/uses/modallogos/edge.png new file mode 100644 index 0000000000..84847789c9 Binary files /dev/null and b/assets/img/uses/modallogos/edge.png differ diff --git a/assets/img/uses/modallogos/evernode.png b/assets/img/uses/modallogos/evernode.png new file mode 100644 index 0000000000..932ad7a2b2 Binary files /dev/null and b/assets/img/uses/modallogos/evernode.png differ diff --git a/assets/img/uses/modallogos/forte.png b/assets/img/uses/modallogos/forte.png new file mode 100644 index 0000000000..520853dd1f Binary files /dev/null and b/assets/img/uses/modallogos/forte.png differ diff --git a/assets/img/uses/modallogos/futureverse.png b/assets/img/uses/modallogos/futureverse.png new file mode 100644 index 0000000000..b7c338533f Binary files /dev/null and b/assets/img/uses/modallogos/futureverse.png differ diff --git a/assets/img/uses/modallogos/gatehub.png b/assets/img/uses/modallogos/gatehub.png new file mode 100644 index 0000000000..16059b867c Binary files /dev/null and b/assets/img/uses/modallogos/gatehub.png differ diff --git a/assets/img/uses/modallogos/gem-wallet.png b/assets/img/uses/modallogos/gem-wallet.png new file mode 100644 index 0000000000..63ffb6357d Binary files /dev/null and b/assets/img/uses/modallogos/gem-wallet.png differ diff --git a/assets/img/uses/modallogos/ledger-city.png b/assets/img/uses/modallogos/ledger-city.png new file mode 100644 index 0000000000..06f1143183 Binary files /dev/null and b/assets/img/uses/modallogos/ledger-city.png differ diff --git a/assets/img/uses/modallogos/multichain.png b/assets/img/uses/modallogos/multichain.png new file mode 100644 index 0000000000..3d163fc376 Binary files /dev/null and b/assets/img/uses/modallogos/multichain.png differ diff --git a/assets/img/uses/modallogos/nftmaster.png b/assets/img/uses/modallogos/nftmaster.png new file mode 100644 index 0000000000..72457d3572 Binary files /dev/null and b/assets/img/uses/modallogos/nftmaster.png differ diff --git a/assets/img/uses/modallogos/onthedex.png b/assets/img/uses/modallogos/onthedex.png new file mode 100644 index 0000000000..765a62cf1c Binary files /dev/null and b/assets/img/uses/modallogos/onthedex.png differ diff --git a/assets/img/uses/modallogos/onxrp.png b/assets/img/uses/modallogos/onxrp.png new file mode 100644 index 0000000000..905986b818 Binary files /dev/null and b/assets/img/uses/modallogos/onxrp.png differ diff --git a/assets/img/uses/modallogos/peerkat.png b/assets/img/uses/modallogos/peerkat.png new file mode 100644 index 0000000000..cc55ec240d Binary files /dev/null and b/assets/img/uses/modallogos/peerkat.png differ diff --git a/assets/img/uses/modallogos/ripple.png b/assets/img/uses/modallogos/ripple.png new file mode 100644 index 0000000000..00baac1d15 Binary files /dev/null and b/assets/img/uses/modallogos/ripple.png differ diff --git a/assets/img/uses/modallogos/rootmaker.png b/assets/img/uses/modallogos/rootmaker.png new file mode 100644 index 0000000000..47abbf81c5 Binary files /dev/null and b/assets/img/uses/modallogos/rootmaker.png differ diff --git a/assets/img/uses/modallogos/sologenic_dex.png b/assets/img/uses/modallogos/sologenic_dex.png new file mode 100644 index 0000000000..b2b28694f2 Binary files /dev/null and b/assets/img/uses/modallogos/sologenic_dex.png differ diff --git a/assets/img/uses/modallogos/styngr.png b/assets/img/uses/modallogos/styngr.png new file mode 100644 index 0000000000..55a1a04b49 Binary files /dev/null and b/assets/img/uses/modallogos/styngr.png differ diff --git a/assets/img/uses/modallogos/supermojo.png b/assets/img/uses/modallogos/supermojo.png new file mode 100644 index 0000000000..45ea281a52 Binary files /dev/null and b/assets/img/uses/modallogos/supermojo.png differ diff --git a/assets/img/uses/modallogos/threezy.png b/assets/img/uses/modallogos/threezy.png new file mode 100644 index 0000000000..a7d690e359 Binary files /dev/null and b/assets/img/uses/modallogos/threezy.png differ diff --git a/assets/img/uses/modallogos/tokenize.png b/assets/img/uses/modallogos/tokenize.png new file mode 100644 index 0000000000..e9855287f2 Binary files /dev/null and b/assets/img/uses/modallogos/tokenize.png differ diff --git a/assets/img/uses/modallogos/towolabs.png b/assets/img/uses/modallogos/towolabs.png new file mode 100644 index 0000000000..8896ddb2e2 Binary files /dev/null and b/assets/img/uses/modallogos/towolabs.png differ diff --git a/assets/img/uses/modallogos/xpmarket.png b/assets/img/uses/modallogos/xpmarket.png new file mode 100644 index 0000000000..5d38a1b965 Binary files /dev/null and b/assets/img/uses/modallogos/xpmarket.png differ diff --git a/assets/img/uses/modallogos/xrp-cafe.png b/assets/img/uses/modallogos/xrp-cafe.png new file mode 100644 index 0000000000..c8915dabc8 Binary files /dev/null and b/assets/img/uses/modallogos/xrp-cafe.png differ diff --git a/assets/img/uses/modallogos/xrp-ledger.png b/assets/img/uses/modallogos/xrp-ledger.png new file mode 100644 index 0000000000..872fd9c9ef Binary files /dev/null and b/assets/img/uses/modallogos/xrp-ledger.png differ diff --git a/assets/img/uses/modallogos/xrp-oval.png b/assets/img/uses/modallogos/xrp-oval.png new file mode 100644 index 0000000000..905986b818 Binary files /dev/null and b/assets/img/uses/modallogos/xrp-oval.png differ diff --git a/assets/img/uses/modallogos/xrp-toolkit.png b/assets/img/uses/modallogos/xrp-toolkit.png new file mode 100644 index 0000000000..402cf21ef7 Binary files /dev/null and b/assets/img/uses/modallogos/xrp-toolkit.png differ diff --git a/assets/img/uses/modallogos/xrpscan.png b/assets/img/uses/modallogos/xrpscan.png new file mode 100644 index 0000000000..231a391f43 Binary files /dev/null and b/assets/img/uses/modallogos/xrpscan.png differ diff --git a/assets/img/uses/modallogos/xumm.png b/assets/img/uses/modallogos/xumm.png new file mode 100644 index 0000000000..474de2d33b Binary files /dev/null and b/assets/img/uses/modallogos/xumm.png differ diff --git a/assets/img/uses/momento.svg b/assets/img/uses/momento.svg new file mode 100644 index 0000000000..f2997afcb4 --- /dev/null +++ b/assets/img/uses/momento.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/uses/right-arrow-light.svg b/assets/img/uses/right-arrow-light.svg new file mode 100644 index 0000000000..5fc9820ff6 --- /dev/null +++ b/assets/img/uses/right-arrow-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/uses/right-arrow.png b/assets/img/uses/right-arrow.png new file mode 100644 index 0000000000..e1d34b0586 Binary files /dev/null and b/assets/img/uses/right-arrow.png differ diff --git a/assets/img/uses/right-arrow.svg b/assets/img/uses/right-arrow.svg new file mode 100644 index 0000000000..a9d85ec50a --- /dev/null +++ b/assets/img/uses/right-arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/js/ecosystem/arrow-animation.json b/assets/js/ecosystem/arrow-animation.json new file mode 100644 index 0000000000..1edf4bf96e --- /dev/null +++ b/assets/js/ecosystem/arrow-animation.json @@ -0,0 +1 @@ +var arrowAnimation = {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.4.3","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":160,"w":112,"h":112,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"ic_arrow-down Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[55.5,56,0],"to":[0,1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[55.5,66,0],"to":[0,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[55.5,46,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[55.5,66,0],"to":[0,0,0],"ti":[0,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[55.5,46,0],"to":[0,-1.667,0],"ti":[0,-1.667,0]},{"t":160,"s":[55.5,56,0]}],"ix":2},"a":{"a":0,"k":[12,12,0],"ix":1},"s":{"a":0,"k":[200,200,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[5.001,-2.501],[0,2.501],[-5.001,-2.501]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509833841,0.098039223166,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[12,16.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[12,19],[12,5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509833841,0.098039223166,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1350,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"ic_arrow-down Outlines 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[344,840,0],"to":[0,1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[344,850,0],"to":[0,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[344,830,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[344,850,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":140,"s":[344,830,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":180,"s":[344,850,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":220,"s":[344,830,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":260,"s":[344,850,0],"to":[0,0,0],"ti":[0,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":300,"s":[344,830,0],"to":[0,-1.667,0],"ti":[0,-1.667,0]},{"t":320,"s":[344,840,0]}],"ix":2},"a":{"a":0,"k":[1.469,19.347,0],"ix":1},"s":{"a":0,"k":[200,200,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[5.001,-2.501],[0,2.501],[-5.001,-2.501]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509833841,0.098039223166,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[12,16.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[12,19],[12,5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.474509833841,0.098039223166,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1350,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/assets/js/ecosystem/numbers-animation-light.json b/assets/js/ecosystem/numbers-animation-light.json new file mode 100644 index 0000000000..f04df456c2 --- /dev/null +++ b/assets/js/ecosystem/numbers-animation-light.json @@ -0,0 +1 @@ +var numAnimationLight = {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.4.3","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":120,"w":500,"h":192,"nm":"Comp 1","ddd":0,"assets":[],"fonts":{"list":[{"fName":"WorkSans-Light","fFamily":"Work Sans","fStyle":"Light","ascent":72.9995727539062},{"fName":"WorkSans-Regular","fFamily":"Work Sans","fStyle":"Regular","ascent":72.9995727539062}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"+","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[0]},{"t":85,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[456.507,57.75,0],"ix":2},"a":{"a":0,"k":[29.197,-30.551,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":0,"k":0,"ix":2}}]}],"t":{"d":{"k":[{"s":{"s":96,"f":"WorkSans-Regular","t":"+","j":0,"tr":0,"lh":115.2,"ls":0,"fc":[0.098,1,0.514]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[377,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":5,"nm":"0000","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[377,98,0],"to":[0,-319.917,0],"ti":[0,319.917,0]},{"t":75,"s":[377,-1821.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[20]},{"t":75,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2049.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0","j":2,"tr":0,"lh":192,"ls":0,"fc":[0.102,0.867,0.698]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":5,"nm":"000","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[270,98,0],"to":[0,-319.917,0],"ti":[0,319.917,0]},{"t":70,"s":[270,-1821.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[20]},{"t":70,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2053.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0","j":2,"tr":0,"lh":192,"ls":0,"fc":[0.141,0.549,0.988]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":5,"nm":"00","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[163,98,0],"to":[0,-479.917,0],"ti":[0,479.917,0]},{"t":65,"s":[163,-2781.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[20]},{"t":65,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,3013.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0\r1\r2\r3\r4\r5","j":2,"tr":0,"lh":192,"ls":0,"fc":[0.396,0.031,0.906]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 1","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[56,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":5,"nm":"0","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[56,98,0],"to":[0,-352,0],"ti":[0,352,0]},{"t":60,"s":[56,-2014,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[20]},{"t":60,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2245.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0\r1","j":1,"tr":0,"lh":192,"ls":0,"fc":[0.576,0.306,0.961]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":176,"style":"Light","w":60.7,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-15.71,0],[0,22.156],[15.61,0],[0,-22.156]],"o":[[15.61,0],[0,-22.156],[-15.71,0],[0,22.156]],"v":[[30.615,1.007],[54.785,-33.234],[30.615,-67.474],[6.345,-33.234]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[12.286,0],[0,19.235],[-12.387,0],[0,-19.235]],"o":[[-12.387,0],[0,-19.235],[12.286,0],[0,19.235]],"v":[[30.615,-3.525],[11.481,-33.234],[30.615,-62.943],[49.649,-33.234]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"\r","size":176,"style":"Light","w":0,"fFamily":"Work Sans"},{"ch":"1","size":176,"style":"Light","w":36.5,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.841,-1.511],[0,0],[-4.431,5.237],[0,-2.82],[0,0],[0,0],[0,0]],"o":[[-3.525,6.042],[0,0],[6.546,-1.712],[-0.101,3.223],[0,0],[0,0],[0,0],[0,0]],"v":[[22.458,-66.467],[3.323,-53.174],[4.633,-48.642],[22.156,-59.518],[21.954,-50.354],[21.954,0],[26.99,0],[26.99,-66.467]],"c":true},"ix":2},"nm":"1","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"2","size":176,"style":"Light","w":56,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,13.495],[13.193,0],[1.208,-12.085],[0,0],[-10.474,0],[0,-9.467],[25.278,-19.739]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[23.767,-17.825],[0,-12.286],[-13.092,0],[0,0],[0.806,-10.977],[10.071,0],[0,12.891],[0,0]],"v":[[6.546,0],[50.958,0],[50.958,-4.633],[20.544,-4.633],[13.898,-4.532],[13.898,-4.633],[48.843,-47.232],[27.393,-67.474],[5.035,-47.232],[9.467,-44.714],[27.292,-62.842],[43.607,-47.232],[6.546,-4.129]],"c":true},"ix":2},"nm":"2","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"3","size":176,"style":"Light","w":55.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.79,0],[3.122,-8.56],[0,0],[-8.359,0],[0.101,-8.762],[9.467,0],[0,0],[0,0],[0,0],[-0.101,-8.459],[9.869,0],[2.115,8.157],[0,0],[-11.783,0],[0,10.977],[8.661,0.302],[0,0],[0,8.862]],"o":[[-9.769,0],[0,0],[2.014,-7.05],[9.366,0],[0,8.057],[0,0],[0,0],[0,0],[10.574,0],[0.101,8.661],[-10.776,0],[0,0],[3.122,9.869],[12.79,0],[0,-8.762],[0,0],[7.452,-0.705],[0,-9.97]],"v":[[27.695,-67.474],[7.15,-53.577],[11.884,-51.26],[27.695,-62.842],[42.398,-49.146],[27.896,-35.852],[24.17,-35.852],[24.17,-31.219],[27.896,-31.219],[44.009,-18.127],[27.594,-3.625],[9.467,-17.12],[4.834,-14.603],[27.292,1.007],[49.246,-17.523],[34.946,-33.536],[34.946,-33.636],[47.635,-50.153]],"c":true},"ix":2},"nm":"3","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"4","size":176,"style":"Light","w":58.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.987,-23.264],[42.197,-23.264],[42.197,-66.467],[35.751,-66.467],[4.129,-22.76],[4.129,-18.933],[37.161,-18.933],[37.161,0],[42.197,0],[42.197,-18.933],[54.987,-18.933]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1.511,2.719],[0,0],[0,0],[0,0],[0,0]],"o":[[1.712,-2.518],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[31.622,-53.476],[37.161,-62.238],[37.363,-62.238],[37.161,-53.677],[37.161,-23.264],[9.567,-23.264]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"4","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"5","size":176,"style":"Light","w":56,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.488,0],[3.223,-3.726],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.56,0],[-0.101,-10.272],[10.272,0],[1.913,8.661],[0,0],[-11.984,0],[0,12.991]],"o":[[-8.56,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.122,-4.33],[9.97,0],[0,9.97],[-10.373,0],[0,0],[3.122,10.675],[13.394,0],[0,-12.589]],"v":[[29.81,-41.492],[12.689,-34.744],[12.589,-34.744],[12.79,-36.053],[15.408,-61.835],[47.937,-61.835],[47.937,-66.467],[11.179,-66.467],[7.553,-29.407],[11.984,-29.407],[29.105,-36.859],[45.52,-20.242],[28.5,-3.625],[10.574,-17.02],[5.74,-14.603],[28.702,1.007],[50.757,-20.444]],"c":true},"ix":2},"nm":"5","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"6","size":176,"style":"Light","w":58.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.172,0],[0,-22.559],[-16.013,0],[0,12.79],[13.293,0],[0.906,-10.373],[0,0],[0,2.014],[-13.898,0],[-1.913,-6.244],[0,0]],"o":[[-14.502,0],[0,21.048],[13.394,0],[0,-12.79],[-8.762,0],[0,0],[-0.302,-2.417],[0,-16.315],[8.359,0],[0,0],[-3.223,-8.459]],"v":[[31.924,-67.474],[6.445,-33.234],[30.817,1.007],[52.771,-19.94],[31.219,-40.988],[11.884,-25.076],[11.581,-25.076],[11.078,-31.824],[31.622,-62.842],[46.628,-52.167],[51.26,-54.382]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-10.071,0],[0,-9.668],[10.474,0],[0,9.567]],"o":[[10.272,0],[0,10.071],[-9.869,0],[0,-8.56]],"v":[[30.917,-36.255],[47.534,-20.142],[30.716,-3.726],[14.2,-20.142]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"6","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"7","size":176,"style":"Light","w":53,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[1.007,-23.264],[0,0],[-16.516,17.523],[0,0]],"o":[[0,0],[0,0],[-16.214,17.422],[0,0],[1.007,-24.472],[0,0],[0,0]],"v":[[3.223,-66.467],[3.223,-61.835],[45.621,-61.835],[20.544,0],[25.781,0],[51.059,-61.835],[51.059,-66.467]],"c":true},"ix":2},"nm":"7","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"7","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"8","size":176,"style":"Light","w":59.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.488,0],[0,-10.272],[-7.352,-2.216],[0,0],[0,-8.661],[-13.898,0],[0,11.179],[8.963,2.316],[0,0],[0,7.654]],"o":[[-12.488,0],[0,7.654],[0,0],[-8.963,2.316],[0,11.179],[14.099,0],[0,-8.661],[0,0],[7.352,-2.216],[0,-10.272]],"v":[[29.709,-67.374],[9.164,-50.555],[20.947,-35.046],[20.947,-34.946],[6.244,-17.523],[29.709,1.007],[53.275,-17.523],[38.571,-34.946],[38.571,-35.046],[50.354,-50.555]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-9.366,0],[0,-7.855],[9.265,0],[0,7.755]],"o":[[9.366,0],[0,7.755],[-9.265,0],[0,-7.855]],"v":[[29.709,-62.741],[45.117,-50.052],[29.709,-37.262],[14.401,-50.052]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[11.078,0],[0,8.56],[-10.876,0],[0,-8.762]],"o":[[-10.977,0],[0,-8.762],[10.977,0],[0,8.56]],"v":[[29.709,-3.625],[11.481,-17.926],[29.709,-32.529],[48.038,-17.926]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"8","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"9","size":176,"style":"Light","w":59.6,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16.013,0],[0,-12.79],[-13.193,0],[-0.806,11.279],[0,0],[0,-2.417],[15.207,0],[1.813,7.452],[0,0],[-11.682,0],[0,22.559]],"o":[[-13.596,0],[0,12.891],[8.862,0],[0,0],[0.302,2.216],[0,17.02],[-10.474,0],[0,0],[2.921,9.164],[15.207,0],[0,-20.947]],"v":[[28.702,-67.474],[6.445,-46.527],[28.198,-25.479],[47.937,-41.794],[48.239,-41.794],[48.843,-34.845],[28.702,-3.625],[11.682,-16.214],[6.647,-13.596],[28.802,1.007],[53.375,-33.234]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-10.675,0],[0,-9.567],[10.071,0],[0,9.769]],"o":[[9.97,0],[0,8.56],[-10.474,0],[0,-10.071]],"v":[[28.802,-62.741],[45.621,-46.326],[28.601,-30.212],[11.682,-46.326]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"9","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"+","size":96,"style":"Regular","w":60.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.886,-35.651],[34.241,-35.651],[34.241,-56.799],[26.688,-56.799],[26.688,-35.651],[5.942,-35.651],[5.942,-28.098],[26.688,-28.098],[26.688,-6.848],[34.241,-6.848],[34.241,-28.098],[54.886,-28.098]],"c":true},"ix":2},"nm":"+","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"+","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"}]} \ No newline at end of file diff --git a/assets/js/ecosystem/numbers-animation.json b/assets/js/ecosystem/numbers-animation.json new file mode 100644 index 0000000000..254b99dca5 --- /dev/null +++ b/assets/js/ecosystem/numbers-animation.json @@ -0,0 +1 @@ +var numAnimation = {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.4.3","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":120,"w":500,"h":192,"nm":"Comp 1","ddd":0,"assets":[],"fonts":{"list":[{"fName":"WorkSans-Light","fFamily":"Work Sans","fStyle":"Light","ascent":72.9995727539062},{"fName":"WorkSans-Regular","fFamily":"Work Sans","fStyle":"Regular","ascent":72.9995727539062}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"+","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[0]},{"t":85,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[456.507,57.75,0],"ix":2},"a":{"a":0,"k":[29.197,-30.551,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":0,"k":0,"ix":2}}]}],"t":{"d":{"k":[{"s":{"s":96,"f":"WorkSans-Regular","t":"+","j":0,"tr":0,"lh":115.2,"ls":0,"fc":[0.604,0.322,1]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[377,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":5,"nm":"0000","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[377,98,0],"to":[0,-319.917,0],"ti":[0,319.917,0]},{"t":75,"s":[377,-1821.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[20]},{"t":75,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2049.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0","j":2,"tr":0,"lh":192,"ls":0,"fc":[0.796,0.306,1]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":5,"nm":"000","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[270,98,0],"to":[0,-319.917,0],"ti":[0,319.917,0]},{"t":70,"s":[270,-1821.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[20]},{"t":70,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2053.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0","j":2,"tr":0,"lh":192,"ls":0,"fc":[0.941,0.239,0.808]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":5,"nm":"00","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[163,98,0],"to":[0,-479.917,0],"ti":[0,479.917,0]},{"t":65,"s":[163,-2781.5,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[20]},{"t":65,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,3013.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0\r1\r2\r3\r4\r5","j":2,"tr":0,"lh":192,"ls":0,"fc":[1,0.416,0.431]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 1","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[56,98,0],"ix":2},"a":{"a":0,"k":[-211.151,-37.036,0],"ix":1},"s":{"a":0,"k":[100.402,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[83,160],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203922002456,0.203922002456,0.215685990277,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-211.674,-39.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[126.032,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":5,"nm":"0","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[56,98,0],"to":[0,-352,0],"ti":[0,352,0]},{"t":60,"s":[56,-2014,0]}],"ix":2},"a":{"a":0,"k":[-7.372,41.613,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Directional Blur","np":4,"mn":"ADBE Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Direction","mn":"ADBE Motion Blur-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Blur Length","mn":"ADBE Motion Blur-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[20]},{"t":60,"s":[0]}],"ix":2}}]}],"t":{"d":{"k":[{"s":{"sz":[107,2245.75],"ps":[-61.25,-28.375],"s":176,"f":"WorkSans-Light","t":"0\r1\r2\r3\r4\r5\r6\r7\r8\r9\r0\r1","j":1,"tr":0,"lh":192,"ls":0,"fc":[1,0.671,0.247]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":301,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":176,"style":"Light","w":60.7,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-15.71,0],[0,22.156],[15.61,0],[0,-22.156]],"o":[[15.61,0],[0,-22.156],[-15.71,0],[0,22.156]],"v":[[30.615,1.007],[54.785,-33.234],[30.615,-67.474],[6.345,-33.234]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[12.286,0],[0,19.235],[-12.387,0],[0,-19.235]],"o":[[-12.387,0],[0,-19.235],[12.286,0],[0,19.235]],"v":[[30.615,-3.525],[11.481,-33.234],[30.615,-62.943],[49.649,-33.234]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"\r","size":176,"style":"Light","w":0,"fFamily":"Work Sans"},{"ch":"1","size":176,"style":"Light","w":36.5,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.841,-1.511],[0,0],[-4.431,5.237],[0,-2.82],[0,0],[0,0],[0,0]],"o":[[-3.525,6.042],[0,0],[6.546,-1.712],[-0.101,3.223],[0,0],[0,0],[0,0],[0,0]],"v":[[22.458,-66.467],[3.323,-53.174],[4.633,-48.642],[22.156,-59.518],[21.954,-50.354],[21.954,0],[26.99,0],[26.99,-66.467]],"c":true},"ix":2},"nm":"1","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"2","size":176,"style":"Light","w":56,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,13.495],[13.193,0],[1.208,-12.085],[0,0],[-10.474,0],[0,-9.467],[25.278,-19.739]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[23.767,-17.825],[0,-12.286],[-13.092,0],[0,0],[0.806,-10.977],[10.071,0],[0,12.891],[0,0]],"v":[[6.546,0],[50.958,0],[50.958,-4.633],[20.544,-4.633],[13.898,-4.532],[13.898,-4.633],[48.843,-47.232],[27.393,-67.474],[5.035,-47.232],[9.467,-44.714],[27.292,-62.842],[43.607,-47.232],[6.546,-4.129]],"c":true},"ix":2},"nm":"2","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"3","size":176,"style":"Light","w":55.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.79,0],[3.122,-8.56],[0,0],[-8.359,0],[0.101,-8.762],[9.467,0],[0,0],[0,0],[0,0],[-0.101,-8.459],[9.869,0],[2.115,8.157],[0,0],[-11.783,0],[0,10.977],[8.661,0.302],[0,0],[0,8.862]],"o":[[-9.769,0],[0,0],[2.014,-7.05],[9.366,0],[0,8.057],[0,0],[0,0],[0,0],[10.574,0],[0.101,8.661],[-10.776,0],[0,0],[3.122,9.869],[12.79,0],[0,-8.762],[0,0],[7.452,-0.705],[0,-9.97]],"v":[[27.695,-67.474],[7.15,-53.577],[11.884,-51.26],[27.695,-62.842],[42.398,-49.146],[27.896,-35.852],[24.17,-35.852],[24.17,-31.219],[27.896,-31.219],[44.009,-18.127],[27.594,-3.625],[9.467,-17.12],[4.834,-14.603],[27.292,1.007],[49.246,-17.523],[34.946,-33.536],[34.946,-33.636],[47.635,-50.153]],"c":true},"ix":2},"nm":"3","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"4","size":176,"style":"Light","w":58.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.987,-23.264],[42.197,-23.264],[42.197,-66.467],[35.751,-66.467],[4.129,-22.76],[4.129,-18.933],[37.161,-18.933],[37.161,0],[42.197,0],[42.197,-18.933],[54.987,-18.933]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1.511,2.719],[0,0],[0,0],[0,0],[0,0]],"o":[[1.712,-2.518],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[31.622,-53.476],[37.161,-62.238],[37.363,-62.238],[37.161,-53.677],[37.161,-23.264],[9.567,-23.264]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"4","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"5","size":176,"style":"Light","w":56,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.488,0],[3.223,-3.726],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.56,0],[-0.101,-10.272],[10.272,0],[1.913,8.661],[0,0],[-11.984,0],[0,12.991]],"o":[[-8.56,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.122,-4.33],[9.97,0],[0,9.97],[-10.373,0],[0,0],[3.122,10.675],[13.394,0],[0,-12.589]],"v":[[29.81,-41.492],[12.689,-34.744],[12.589,-34.744],[12.79,-36.053],[15.408,-61.835],[47.937,-61.835],[47.937,-66.467],[11.179,-66.467],[7.553,-29.407],[11.984,-29.407],[29.105,-36.859],[45.52,-20.242],[28.5,-3.625],[10.574,-17.02],[5.74,-14.603],[28.702,1.007],[50.757,-20.444]],"c":true},"ix":2},"nm":"5","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"6","size":176,"style":"Light","w":58.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.172,0],[0,-22.559],[-16.013,0],[0,12.79],[13.293,0],[0.906,-10.373],[0,0],[0,2.014],[-13.898,0],[-1.913,-6.244],[0,0]],"o":[[-14.502,0],[0,21.048],[13.394,0],[0,-12.79],[-8.762,0],[0,0],[-0.302,-2.417],[0,-16.315],[8.359,0],[0,0],[-3.223,-8.459]],"v":[[31.924,-67.474],[6.445,-33.234],[30.817,1.007],[52.771,-19.94],[31.219,-40.988],[11.884,-25.076],[11.581,-25.076],[11.078,-31.824],[31.622,-62.842],[46.628,-52.167],[51.26,-54.382]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-10.071,0],[0,-9.668],[10.474,0],[0,9.567]],"o":[[10.272,0],[0,10.071],[-9.869,0],[0,-8.56]],"v":[[30.917,-36.255],[47.534,-20.142],[30.716,-3.726],[14.2,-20.142]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"6","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"7","size":176,"style":"Light","w":53,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[1.007,-23.264],[0,0],[-16.516,17.523],[0,0]],"o":[[0,0],[0,0],[-16.214,17.422],[0,0],[1.007,-24.472],[0,0],[0,0]],"v":[[3.223,-66.467],[3.223,-61.835],[45.621,-61.835],[20.544,0],[25.781,0],[51.059,-61.835],[51.059,-66.467]],"c":true},"ix":2},"nm":"7","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"7","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"8","size":176,"style":"Light","w":59.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.488,0],[0,-10.272],[-7.352,-2.216],[0,0],[0,-8.661],[-13.898,0],[0,11.179],[8.963,2.316],[0,0],[0,7.654]],"o":[[-12.488,0],[0,7.654],[0,0],[-8.963,2.316],[0,11.179],[14.099,0],[0,-8.661],[0,0],[7.352,-2.216],[0,-10.272]],"v":[[29.709,-67.374],[9.164,-50.555],[20.947,-35.046],[20.947,-34.946],[6.244,-17.523],[29.709,1.007],[53.275,-17.523],[38.571,-34.946],[38.571,-35.046],[50.354,-50.555]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-9.366,0],[0,-7.855],[9.265,0],[0,7.755]],"o":[[9.366,0],[0,7.755],[-9.265,0],[0,-7.855]],"v":[[29.709,-62.741],[45.117,-50.052],[29.709,-37.262],[14.401,-50.052]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[11.078,0],[0,8.56],[-10.876,0],[0,-8.762]],"o":[[-10.977,0],[0,-8.762],[10.977,0],[0,8.56]],"v":[[29.709,-3.625],[11.481,-17.926],[29.709,-32.529],[48.038,-17.926]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"8","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"9","size":176,"style":"Light","w":59.6,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16.013,0],[0,-12.79],[-13.193,0],[-0.806,11.279],[0,0],[0,-2.417],[15.207,0],[1.813,7.452],[0,0],[-11.682,0],[0,22.559]],"o":[[-13.596,0],[0,12.891],[8.862,0],[0,0],[0.302,2.216],[0,17.02],[-10.474,0],[0,0],[2.921,9.164],[15.207,0],[0,-20.947]],"v":[[28.702,-67.474],[6.445,-46.527],[28.198,-25.479],[47.937,-41.794],[48.239,-41.794],[48.843,-34.845],[28.702,-3.625],[11.682,-16.214],[6.647,-13.596],[28.802,1.007],[53.375,-33.234]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-10.675,0],[0,-9.567],[10.071,0],[0,9.769]],"o":[[9.97,0],[0,8.56],[-10.474,0],[0,-10.071]],"v":[[28.802,-62.741],[45.621,-46.326],[28.601,-30.212],[11.682,-46.326]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"9","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"},{"ch":"+","size":96,"style":"Regular","w":60.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.886,-35.651],[34.241,-35.651],[34.241,-56.799],[26.688,-56.799],[26.688,-35.651],[5.942,-35.651],[5.942,-28.098],[26.688,-28.098],[26.688,-6.848],[34.241,-6.848],[34.241,-28.098],[54.886,-28.098]],"c":true},"ix":2},"nm":"+","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"+","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Work Sans"}]} \ No newline at end of file diff --git a/assets/js/modal.js b/assets/js/modal.js new file mode 100644 index 0000000000..0f043b58b4 --- /dev/null +++ b/assets/js/modal.js @@ -0,0 +1,245 @@ +$(document).ready(() => { + // Note: Use lowercase filenames here to avoid case inconsistency between + // dev environments like macOS and Windows which are not case-sensitive, + // and production Linux servers which use case-sensitive file systems. + const logos = { + infrastructure: [ + "xrp-ledger", + "gatehub", + "towolabs", + "xrpscan", + "xrp-toolkit", + "bithomp", + "onthedex", + ], + developer_tooling: [ + "cryptum", + "evernode", + "threezy", + "tokenize", + ], + interoperability: ["multichain"], + wallet: [ + "bitfrost", + "crossmark", + "edge", + "gem-wallet", + "xumm", + ], + nfts: [ + "aesthetes", + "audiotarky", + "nftmaster", + "peerkat", + "sologenic_dex", + "xrp-cafe", + "xrp-oval", + ], + exchanges: ["sologenic_dex", "xpmarket"], + gaming: [ + "forte", + "ledger-city", + ], + security: ["anchain"], + payments: ["ripple", "supermojo"], + cbdc: ["ripple"], + sustainability: ["carbonland-trust"], + custody: ["gatehub", "bitgo"], + }; + // Helper function to create a logo element + function createLogoElement(logoSrc, title, id) { + const logoElem = document.createElement("div"); + logoElem.alt = `${title} logo`; + logoElem.classList.add(`logo-item`); + logoElem.classList.add(`${logoSrc}`); + return logoElem; + } + // Add two new constiables for arrow buttons + const leftArrow = document.getElementById("leftArrow"); + const rightArrow = document.getElementById("rightArrow"); + // Handle arrow button clicks + function handleArrowClick(direction) { + // Get the current data index + const currentIndex = parseInt(modal.getAttribute("data-index")); + + // Calculate the new index based on the direction + const newIndex = direction === "left" ? currentIndex - 1 : currentIndex + 1; + + // Update the modal content with the new data + updateModalContent(useCaseData[newIndex]); + + // Update the modal's data-index attribute + modal.setAttribute("data-index", newIndex); + + // Show or hide the arrow buttons based on the new index + leftArrow.style.display = newIndex === 0 ? "none" : "block"; + rightArrow.style.display = + newIndex === useCaseData.length - 1 ? "none" : "block"; + } + + // Add click event listeners for arrow buttons + leftArrow.addEventListener("click", () => handleArrowClick("left")); + rightArrow.addEventListener("click", () => handleArrowClick("right")); + const modal = document.getElementById("myModal"); + const openModalBtns = document.querySelectorAll("li.open-modal"); + const useCaseData = []; + + // Populate the useCaseData array with data from the li elements + openModalBtns.forEach(function (btn) { + const id = btn.getAttribute("data-id"); + const title = btn.getAttribute("data-title"); + const description = btn.getAttribute("data-description"); + const number = btn.getAttribute("data-number"); + const src = btn.getAttribute("data-src"); + + useCaseData.push({ id, title, number, src, description }); + }); + + // Get the elements in the modal that will be updated + const modalImage = document.querySelector(".modal .section-image"); + const modalTextDescription = document.querySelector( + ".modal .section-text-description" + ); + const modalTextTitle = document.querySelector(".modal .section-text-title"); + const modalLogos = document.querySelector(".modal .section-logos"); + // Add a function to update the modal content + function updateModalContent({ id, title, number, src, description, index }) { + const arrowContainer = document.getElementById("arrows-container"); + modalImage.src = src; + modalImage.id = id; + modalImage.alt = title + " logo"; + modalTextDescription.textContent = description; + modalTextTitle.textContent = title; + modalLogos.innerHTML = ""; + const logoArray = logos[id] || []; + // Reset styles and classes for modalLogos + modalLogos.removeAttribute("style"); + modalLogos.className = ""; + + if (logoArray.length > 0) { + const topRowDiv = document.createElement("div"); + topRowDiv.className = "top-row"; + const bottomRowDiv = document.createElement("div"); + bottomRowDiv.className = "bottom-row"; + + if (logoArray.length === 7) { + // 4 on top, 3 on bottom + for (let i = 0; i < 4; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + topRowDiv.appendChild(logoElem); + } + for (let i = 4; i < 7; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + bottomRowDiv.appendChild(logoElem); + } + }else if (logoArray.length === 8) { + // 4 on top, 4 on bottom + for (let i = 0; i < 4; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + topRowDiv.appendChild(logoElem); + } + for (let i = 4; i < 8; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + bottomRowDiv.appendChild(logoElem); + } + } else if (logoArray.length === 6) { + // Special case: 3 on top, 3 on bottom + for (let i = 0; i < 3; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + topRowDiv.appendChild(logoElem); + } + for (let i = 3; i < 6; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + bottomRowDiv.appendChild(logoElem); + } + } else if (logoArray.length === 5) { + // Special case: 3 on top, 2 on bottom + for (let i = 0; i < 3; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + topRowDiv.appendChild(logoElem); + } + for (let i = 3; i < 5; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + bottomRowDiv.appendChild(logoElem); + } + bottomRowDiv.style.justifyContent = "center"; // Center the logos + } else if (logoArray.length === 4) { + // Special case: 2 on top, 2 on bottom + for (let i = 0; i < 2; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + topRowDiv.appendChild(logoElem); + } + for (let i = 2; i < 4; i++) { + const logoElem = createLogoElement(logoArray[i], title, id); + bottomRowDiv.appendChild(logoElem); + } + bottomRowDiv.style.justifyContent = "center"; // Center the logos + } else { + // Default case + logoArray.forEach((logoSrc) => { + const logoElem = createLogoElement(logoSrc, title, id); + topRowDiv.appendChild(logoElem); + }); + } + + modalLogos.appendChild(topRowDiv); + if (bottomRowDiv.hasChildNodes()) { + modalLogos.appendChild(bottomRowDiv); + } + } else { + modalLogos.className = "flex-center"; + } + if (id === "infrastructure") { + arrowContainer.style.justifyContent = "end"; + } else { + arrowContainer.style.justifyContent = "space-between"; + } + } + openModalBtns.forEach(function (btn, index) { + btn.onclick = function () { + const arrowContainer = document.getElementById("arrows-container"); + // Read the data-* attributes from the clicked li + const id = btn.getAttribute("data-id"); + const title = btn.getAttribute("data-title"); + const description = btn.getAttribute("data-description"); + const number = btn.getAttribute("data-number"); + const src = btn.getAttribute("data-src"); + // Update the modal content with the data from the clicked li + modalImage.id = id; + modalImage.alt = title + " logo"; + modalTextDescription.textContent = description; + modalTextTitle.textContent = title; + + // Set the data index on the modal + modal.setAttribute("data-index", index); + + // Update the modal content with the data from the clicked li + updateModalContent({ id, title, number, src, description, index }); + + // Show or hide the arrow buttons based on the index + leftArrow.style.display = index === 0 ? "none" : "block"; + rightArrow.style.display = + index === useCaseData.length - 1 ? "none" : "block"; + + modal.style.display = "block"; + + if (id === "infrastructure") { + arrowContainer.style.justifyContent = "end"; + } else { + arrowContainer.style.justifyContent = "space-between"; + } + }; + }); + + window.onclick = function (event) { + if (event.target == modal) { + modal.style.display = "none"; + } + }; + + document.addEventListener("keydown", function (event) { + if (event.key === "Escape") { + modal.style.display = "none"; + } + }); +}); diff --git a/assets/js/theme-switch.js b/assets/js/theme-switch.js index 869321a69c..7801fb4707 100644 --- a/assets/js/theme-switch.js +++ b/assets/js/theme-switch.js @@ -5,6 +5,7 @@ function apply_color_scheme(theme) { const disable_theme = (theme == "dark") ? "light" : "dark"; document.documentElement.classList.add(theme) document.documentElement.classList.remove(disable_theme) + document.documentElement.setAttribute("data-theme", theme) // $("#css-toggle-btn").prop( "checked", (theme == 'dark') ); } diff --git a/assets/js/use-cases.js b/assets/js/use-cases.js index 0288b9e74c..cbe3133b47 100644 --- a/assets/js/use-cases.js +++ b/assets/js/use-cases.js @@ -1,5 +1,4 @@ $(document).ready(() => { - //show these featured on load. const show_cats_arr = ["infrastructure", "developer_tooling"] diff --git a/content/@i18n/ja/concepts/accounts/account-types.md b/content/@i18n/ja/concepts/accounts/account-types.md new file mode 100644 index 0000000000..49fdd63ced --- /dev/null +++ b/content/@i18n/ja/concepts/accounts/account-types.md @@ -0,0 +1,85 @@ +--- +html: account-types.html +parent: accounts.html +blurb: XRP Ledgerで自動的にトランザクションを送信するビジネスは、リスクを最小限に抑えるために目的ごとに別のアドレスを設定することをおすすめします。 +labels: + - トークン + - セキュリティ +--- +# アカウントの種類 + +{% include '_snippets/issuing-and-operational-addresses-intro.ja.md' %} + + +## 資金のライフサイクル + +トークン発行者がこのような役割を分担すると、以下の図のように資金が一方向に流れるようになります。 + +{{ include_svg("img/issued-currency-funds-flow.ja.svg", "図: 発行アドレスから待機アドレス、運用アドレス、顧客アドレスおよびパートナーアドレスに移動し、最後に発行アドレスに戻る資金フロー")}} + +発行アドレスは、待機アドレスに支払いを送信することでトークンを作成します。これらのトークンは(多くの場合)債務を表すため、発行アドレスの観点からはマイナスの価値を持ちます。同じトークンは、待機アドレスの観点も含めると、他の観点からはプラスの価値を持ちます。 + +待機アドレスは、実際の人間によって操作され、トークンを運用アドレスに送信します。このステップにより、発行アドレスはこの時点以降、可能な限り使用されることなく、同時に少なくとも一定のトークンを待機状態にすることができます。 + +自動化されたシステムにより運用される運用アドレスは、流動性プロバイダー、パートナー、その他の顧客など、他のカウンターパーティに資金を送ります。これらのカウンターパーティは、資金を自由に複数回送金することができます。 + +いつものように、トークンの支払いはトラストラインを通じて発行者を「波及」しなければなりません。 + +最終的に、誰かがトークンを発行者に送り返します。これによってトークンはバーンされ、XRP Ledgerにおける発行者の債務は減少します。トークンがステーブルコインであれば、これはトークンを対応するオフレジャー資産と交換する最初のステップです。 + +## 発行アドレス + +発行アドレスは金庫に似ています。パートナーアドレス、顧客アドレス、運用アドレスは、発行アドレスにトラストラインを作成しますが、このアドレスは可能な限りトランザクションを送信しません。人間のオペレーターが定期的に、発行アドレスからトランザクションを作成、署名し、待機アドレスまたは運用アドレスの残高を補充します。理想的には、これらのトランザクションに署名するために使用される秘密鍵は、インターネットに接続されたコンピュータから決してアクセスできないようにする必要があります。 + +金庫とは異なり、発行アドレスは顧客またはパートナーからの支払いを直接受領できます。XRP Ledgerのトランザクションは全て公開されているため、自動化されたシステムは秘密鍵を必要とせずに発行アドレスへの支払いを監視することができます。 + +### 発行アドレスの漏えい + +悪意のある第三者が金融機関の発行アドレスの秘密鍵を知った場合、その第三者は新しいトークンを発行し、ユーザに送ったり、分散型取引所で取引したりすることができます。これにより、ステーブルコインの発行者は支払不能に陥る可能性があります。金融機関が合法的に入手したトークンを区別し、公正に換金することが困難になる可能性があります。金融機関が発行アドレスのコントロールを失った場合、金融機関は新しい発行アドレスを作成しなければならず、古い発行アドレスにトラストラインを持つすべてのユーザは、新しいアドレスで新しいトラストラインを作成しなければなりません。 + +### 複数の発行アドレス + +金融機関はXRP Ledgerで1つの発行アドレスから複数の通貨を発行することができます。ただし、[送金手数料](transfer-fees.html)のパーセンテージや[Global Freeze](freezes.html)の状態など、1つのアドレスから発行される全ての(代替可能)トークンに等しく適用される設定もあります。トークンの種類ごとに設定を変えて柔軟に管理したい場合、金融機関は通貨ごとに異なる発行アドレスを使用する必要があります。 + + +## 運用アドレス + +運用アドレスはレジに似ています。イシュアンスを顧客とパートナーに送信して、金融機関に代わって支払いを行います。トランザクションに自動的に署名するには、運用アドレスの秘密鍵をインターネットに接続されたサーバに保管する必要があります。(秘密鍵は暗号化して保管できますが、サーバがトランザクションに署名する際に秘密鍵を復号化する必要があります。)顧客やパートナーは、運用アドレスへのトラストラインを作成しませんし、作成すべきではありません。 + +各運用アドレスのトークンとXRPの残高は限られています。運用アドレスの残高が少なくなると、金融機関は発行アドレスまたは待機アドレスから支払いを送ることで残高を補充します。 + +### 運用アドレスの漏えい + +不正使用者が運用アドレスのシークレットキーを入手した場合に金融機関が失う可能性のある通貨額は、最大でも運用アドレスが保有している額までです。金融機関は、顧客やパートナーからのアクションなしに、新しい運用アドレスに切り替えることができます。 +悪意のある第三者が運用アドレスの秘密鍵を知ってしまった場合、金融機関が失うのはその運用アドレスが持つ分の金額のみです。金融機関は、顧客やパートナーが何もしなくても、新しい運用アドレスに切り替えることができます。 + +## 待機アドレス + +金融機関がリスクと利便性のバランスのために取ることができるもう一つの手段として、発行アドレスと運用アドレスの中間地点として「待機アドレス」を使用することです。金融機関は、待機アドレスとして追加のXRP Ledgerアドレスに資金を供給することができ、その鍵は常時オンラインのサーバでは利用できませんが、別の信頼できるユーザに委託されます。 + +運用アドレスの資金(トークンまたはXRP)が不足した場合、信頼できるユーザは待機アドレスを使って運用アドレスの残高を補充することができます。待機アドレスの資金が不足した場合、金融機関は発行アドレスを使用して、単一のトランザクションでより多くの資金を待機アドレスに送ることができ、待機アドレスは必要に応じてそれらの資金を自分たちの間で分配することができます。これにより、発行アドレスのセキュリティが向上し、単一の自動化システムの管理下に多くの資金を残すことなく、トランザクションの総数を少なくすることができます。 + +運用アドレスと同様に、待機アドレスは、顧客やパートナーではなく、発行アドレスとトラストラインを設定しなければなりません。運用アドレスに適用されるすべての注意事項は、待機アドレスにも適用されます。 + +### スタンバイアドレスの漏えい + +待機アドレスの秘密鍵が漏えいした場合、その影響は運用アドレスの場合と同じです。悪意のある第三者は、待機アドレスが保有するすべての残高を盗むことができ、金融機関は顧客やパートナーが何もしなくても、新しい待機アドレスに切り替えることができます。 + + +## 関連項目 + +- **コンセプト:** + - [アカウント](accounts.html) + - [暗号鍵](cryptographic-keys.html) +- **チュートリアル:** + - [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html) + - [レギュラーキーペアの変更または削除](change-or-remove-a-regular-key-pair.html) +- **リファレンス:** + - [account_infoメソッド][] + - [SetRegularKeyトランザクション][] + - [AccountRootオブジェクト](accountroot.html) + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/@i18n/ja/concepts/accounts/accounts.md b/content/@i18n/ja/concepts/accounts/accounts.md new file mode 100644 index 0000000000..26503f81d0 --- /dev/null +++ b/content/@i18n/ja/concepts/accounts/accounts.md @@ -0,0 +1,71 @@ +--- +html: accounts.html +parent: concepts.html +blurb: XRP Ledgerのアカウントについて説明します。アカウントはトランザクションを送信でき、XRPを保有できます。 +labels: + - アカウント + - 支払い +--- +# アカウント + +XRP Ledgerの「アカウント」は、XRPの所有者と[トランザクション]アカウントの主な要素は次のとおりです。 + +アカウントは、アドレス、XRPの残高、シーケンス番号、トランザクション履歴から構成されます。トランザクションを送信するためには、所有者はアカウントに紐付く1つ以上の暗号鍵ペアを必要とします。 + + +## アカウントの構成 + +アカウントの種等な構成要素は次の通りです。 + +- 識別用の**アドレス**。例えば、`rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn`。 +- **XRPの残高**。XRP残高の一部は、[準備金](reserves.html)用に確保されています。 +- **シーケンス番号**。このアカウントから送信されるトランザクションがすべて、正しい順序で、それぞれ1回のみ適用されるようにします。トランザクションを実行するには、トランザクションのシーケンス番号と送金元のシーケンス番号が一致する必要があります。その後も、トランザクションが適用されている限り、アカウントのシーケンス番号は1ずつ増加します。(関連項目: [基本的なデータタイプ: アカウントシーケンス](basic-data-types.html#アカウントシーケンス)) +- このアカウントと残高に影響を及ぼした**トランザクションの履歴**。 +- [トランザクションの承認](transactions.html#トランザクションの承認)方法。 + - アカウント固有のマスターキーのペア。(無効にできますが、変更はできません。) + - ローテーションして使用できる「レギュラー」キーペア。 + - [マルチシグ](multi-signing.html)の署名者のリスト。(アカウントのコアデータとは別に保存されます。) + +アカウントのコアデータは、[AccountRoot](accountroot.html)レジャーエントリに保存されます。アカウントは、他の複数のタイプのレジャーエントリの所有者(または部分的な所有者)になることもできます。 + +**ヒント:** XRP Ledgerの「アカウント」は、財務上の用途(例:「銀行口座」)やコンピュータ上の用途(例:「UNIXアカウント」)で使用されます。XRP以外の通貨および資産はXRP Ledgerアカウント自体には保存されません。そのような資産はそれぞれ、両当事者を結ぶ「トラストライン」と呼ばれる会計関係に保存されます。 + + +### アカウントの作成 + +「アカウント作成」専用のトランザクションはありません。Paymentトランザクションでまだアカウントを所有していない数学的に有効なアドレスに[アカウントの準備金](reserves.html)以上のXRPが送信されると、[Paymentトランザクション][]で自動的に新しいアカウントが作成されます。これはアカウントへの _資金提供_ と呼ばれ、レジャーに[AccountRootエントリー](accountroot.html)が作成されます。それ以外のトランザクションでアカウントを作成することはできません。 + +**注意:** アカウントへ資金提供をすることは、そのアカウントに対して特別な権限を持つことには**なりません**。アカウントのアドレスに対応する秘密鍵を持っている人なら誰でも、アカウントとそれに含まれるすべてのXRPの完全制御権を持っています。一部のアドレスでは、誰も秘密鍵を持っていない場合があります。その場合、アカウントは[ブラックホール](addresses.html#特別なアドレス)になり、XRPは永久に失われます。 + +XRP Ledgerでアカウントを取得する一般的な方法は次のとおりです。 + +1. ランダム性の強いソースからキーペアを生成し、そのキーペアのアドレスを計算します。(例えば、[wallet_proposeメソッド][]を使用して計算することができます。) + +2. XRP Ledgerにアカウントをすでに持っているユーザーに、生成したアドレスにXRPを送信してもらいます。 + + - 例えば、一般的な取引所でXRPを購入し、その取引所から、指定したアドレスにXRPを出金することができます。 + + **注意:** 自身のXRP Ledgerアドレスで初めてXRPを受け取る場合は[アカウントの準備金](reserves.html)(現在は10XRP)を支払う必要があります。この金額のXRPは無期限に使用できなくなります。一方で、一般的な取引所では通常、顧客のXRPはすべて、共有されたいくつかのXRP Ledgerアカウントに保有されているため、顧客はその取引所で個々のアカウントの準備金を支払う必要はありません。引き出す前に、XRP Ledgerに直接アカウントを保有することが、金額に見合う価値があるかどうかを検討してください。 + + + +## 関連項目 + +- **コンセプト:** + - [準備金](reserves.html) + - [暗号鍵](cryptographic-keys.html) + - [発行アドレスと運用アドレス](account-types.html) +- **リファレンス:** + - [account_infoメソッド][] + - [wallet_proposeメソッド][] + - [AccountSetトランザクション][] + - [Paymentトランザクション][] + - [AccountRootオブジェクト](accountroot.html) +- **チュートリアル:** + - [アカウント設定の管理(カテゴリー)](manage-account-settings.html) + - [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html) + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/@i18n/ja/concepts/accounts/addresses.md b/content/@i18n/ja/concepts/accounts/addresses.md new file mode 100644 index 0000000000..e80134d308 --- /dev/null +++ b/content/@i18n/ja/concepts/accounts/addresses.md @@ -0,0 +1,88 @@ +--- +html: addresses.html +parent: accounts.html +blurb: アドレスは、base58フォーマットを使用して、XRP Ledgerのアカウントを一意に識別します。 +labels: + - アカウント +--- +# アドレス + +{% include '_snippets/data_types/address.ja.md' %} + +有効なアドレスであれば、資金を入金することで[XRP Ledgerのアカウントになる](accounts.html#creating-accounts)ことができます。また、[レギュラーキー](cryptographic-keys.html)や[署名者リスト](multi-signing.html)のメンバーとして、資金提供されていないアドレスを使用することもできます。資金を供給されたアカウントだけがトランザクションの送信者になることができます。 + +キーペアの生成を始めとする有効なアドレスの作成は、厳密には数学的な作業です。キーペアの生成とアドレスの計算は、XRP Ledgerや他のいかなる第三者とも通信することなく、完全にオフラインで行うことができます。公開鍵からアドレスへの変換には一方向ハッシュ関数が使用されるため、公開鍵とアドレスの一致を確認することは可能ですが、アドレスのみから公開鍵を導き出すことは不可能です。(これが署名付きトランザクションに公開鍵と送信者のアドレスを含める理由の一部です)。 + + +## 特別なアドレス + +XRP Ledgerでは、特別な意味や歴史的な役割を持つアドレスがあります。多くの場合、これらは"ブラックホール"アドレスであり、そのアドレスは既知の秘密鍵に由来するものではありません。アドレスから秘密鍵を推測することは事実上不可能であるため、ブラックホールアドレスが保有するXRPは永遠に失われます。 + +| アドレス | 名称 | 意味 | ブラック ホール? | +|-------------------------------|-----|-----|----------------| +| `rrrrrrrrrrrrrrrrrrrrrhoLvTp` | ACCOUNT\_ZERO | 値0を[base58][]形式にエンコードしたXRP Ledgerのアドレス。ピアツーピア通信では、このアドレスは、XRPの発行者として`rippled`で使用されます。 | はい | +| `rrrrrrrrrrrrrrrrrrrrBZbvji` | ACCOUNT\_ONE | 値1を[base58][]形式にエンコードしたXRP Ledgerのアドレス。レジャーの[RippleStateエントリー](ripplestate.html)では、このアドレスは、トラストライン残高の発行者のプレースホルダーとして使用されます。 | はい | +| `rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh` | ジェネシスアカウント | `rippled`で(スタンドアロンモードなど)新しいジェネシスレジャーが一から開始される場合、このアカウントはすべてのXRPを保持します。このアドレスは、シード値`masterpassphrase`から生成されており、この値は[ハードコーディング](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 | いいえ | +| `rrrrrrrrrrrrrrrrrNAMEtxvNvQ` | Ripple Namesの登録用ブラックホール | 以前、Ripple社は、Ripple Namesを登録するために、このアカウントにXRPを送金するようユーザに求めていました。| はい | +| `rrrrrrrrrrrrrrrrrrrn5RM1rHd` | NaNアドレス | 以前のバージョンの[ripple-lib](https://github.com/XRPLF/xrpl.js)では、XRP Ledgerの[base58][]文字列エンコード形式を使用して、値[NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN)をエンコードするときにこのアドレスを生成しました。 | はい | + + +## アドレスのエンコード + +**ヒント:** これらの技術的な詳細は、XRP Ledgerとの互換性を保つために低レベルのライブラリソフトウェアを構築しているユーザーのみを対象としています! + +[[ソース]](https://github.com/XRPLF/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140 "ソース") + +XRP Ledgerのアドレスは、[base58][]形式の _ディクショナリ_ `rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`を使用してエンコードされています。XRP Ledgerはbase58でいくつかのタイプのキーをエンコードするため、それらを区別するためにエンコードされたデータの前に1バイトの「タイプ接頭辞」(「バージョン接頭辞」とも呼ばれます)を付けます。タイプ接頭辞によりアドレスは通常、base58形式の異なる文字で始まります。 + +次の図は、キーとアドレスの関係を示しています + +{{ include_svg("img/address-encoding.ja.svg", "マスター公開鍵 + タイプ接頭辞 → アカウントID + チェックサム → アドレス") }} + +公開鍵からXRP Ledgerアドレスを計算する式は次の通りです。完全なサンプルコードついては、[`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/js/encode_address.js)をご覧ください。パスフレーズまたはシード値から公開鍵を導出するプロセスについては、[鍵の導出](cryptographic-keys.html#鍵導出)をご覧ください。 + +1. 次の必須アルゴリズムをインポートします。SHA-256、RIPEMD160、base58。base58のディクショナリを設定します。 + + 'use strict'; + const assert = require('assert'); + const crypto = require('crypto'); + const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'; + const base58 = require('base-x')(R_B58_DICT); + + assert(crypto.getHashes().includes('sha256')); + assert(crypto.getHashes().includes('ripemd160')); + +2. 33バイトのECDSA secp256k1公開鍵、または32バイトのEd25519公開鍵で始めます。Ed25519キーの場合は、キーの前にバイト文字`0xED`を付与します。 + + const pubkey_hex = + 'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32'; + const pubkey = Buffer.from(pubkey_hex, 'hex'); + assert(pubkey.length == 33); + +3. 公開鍵のSHA-256ハッシュの[RIPEMD160](https://en.wikipedia.org/wiki/RIPEMD)ハッシュを計算します。この値は「Account ID」です。 + + const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey); + const pubkey_outer_hash = crypto.createHash('ripemd160'); + pubkey_outer_hash.update(pubkey_inner_hash.digest()); + const account_id = pubkey_outer_hash.digest(); + +4. アカウントIDのSHA-256ハッシュのSHA-256ハッシュを計算します。最初の4バイトを使用します。この値が「チェックサム」です。 + + const address_type_prefix = Buffer.from([0x00]); + const payload = Buffer.concat([address_type_prefix, account_id]); + const chksum_hash1 = crypto.createHash('sha256').update(payload).digest(); + const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest(); + const checksum = chksum_hash2.slice(0,4); + +5. ペイロードとチェックサムを連結します。連結バッファーのbase58値を計算します。この結果が、アドレスになります。 + + const dataToEncode = Buffer.concat([payload, checksum]); + const address = base58.encode(dataToEncode); + console.log(address); + // rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN + + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/accounts/cryptographic-keys.ja.md b/content/@i18n/ja/concepts/accounts/cryptographic-keys.md similarity index 76% rename from content/concepts/accounts/cryptographic-keys.ja.md rename to content/@i18n/ja/concepts/accounts/cryptographic-keys.md index a2153b9b48..05531404a0 100644 --- a/content/concepts/accounts/cryptographic-keys.ja.md +++ b/content/@i18n/ja/concepts/accounts/cryptographic-keys.md @@ -14,6 +14,7 @@ XRP Ledgerでは、[トランザクション](transactions.html)による一連 **警告:** 秘密鍵のセキュリティを適切に維持することが重要です。デジタル署名は、あなたがトランザクション送信する権限を有していることをXRP Ledgerに対して検証できる唯一の手段であり、レジャーに提出されたトランザクションの取り消しや無効化を行う権限を有する管理者は存在しません。お使いのXRP Ledgerアカウントの秘密鍵があなた以外の何者かに知られた場合、その人物はあなたと同様にデジタル署名を作成し、トランザクションを承認することができます。 + ## キーの生成 多くの[クライアントライブラリ](client-libraries.html)やアプリケーションは、XRP Ledgerでの使用に合わせてキーペアを生成できます。もちろん、信頼できるデバイスやソフトウェアで生成されたキーペアのみを使用する必要があります。悪意のあるアプリケーションは、あなたの秘密情報を悪意のあるユーザーに公開する可能性があり、そのユーザーはあなたのアカウントから後でトランザクションを送信することができます。 @@ -24,7 +25,7 @@ XRP Ledgerでは、[トランザクション](transactions.html)による一連 XRP Ledgerを扱う場合、パスフレーズ、シード、アカウントID、アドレスなど、いくつかの関連する値を使用することもあります。 -{{ include_svg("img/cryptographic-keys.svg", "Diagram: パスフレーズ → シード → 秘密鍵 → 公開鍵 → アカウントID ←→ アドレス") }} +{{ include_svg("img/cryptographic-keys.ja.svg", "Diagram: パスフレーズ → シード → 秘密鍵 → 公開鍵 → アカウントID ←→ アドレス") }} _図: 暗号鍵の値の関係を簡略化した図_ パスフレーズ、シード、秘密鍵は**秘密**であり、あるアカウントのこれらの値のいずれかを知っていれば、有効な署名を行うことができ、そのアカウントを完全に制御することができます。もしあなたがアカウントを所有しているのであれば、アカウントの秘密情報には**細心の注意を払ってください**。もしあなたがそれらを持っていないなら、あなたは自分のアカウントを利用することはできません。もし他の誰かがそれらにアクセスすることができれば、彼らはあなたのアカウントをコントロールすることができます。 @@ -33,7 +34,6 @@ _図: 暗号鍵の値の関係を簡略化した図_ 鍵の導出の仕組みの技術的な詳細については、[鍵の導出](#鍵導出)を参照してください。 - ### パスフレーズ オプションとして、パスフレーズやその他の情報を、シードや秘密鍵の決定方法として使用することができます。これは、完全にランダムにシードや秘密鍵を選択するよりも安全性が低いですが、これを行いたいレアケースもあります。(例えば、2018年に「XRPuzzler」が最初に[パズルを解いた人](https://bitcoinexchangeguide.com/cryptographic-puzzle-creator-xrpuzzler-offers-137-xrp-reward-to-anyone-who-can-solve-it/)にXRPをプレゼントしました。彼はパズルの解答を、賞品のXRPを保有するアカウントへのパスフレーズとして使用しました) @@ -42,7 +42,7 @@ _図: 暗号鍵の値の関係を簡略化した図_ ### シード -_シード_ 値は、アカウントの実際の秘密鍵と公開鍵を[導出](#鍵導出)するために使用される、コンパクトな値です。[wallet_proposeメソッド][]のレスポンスでは、`master_key`, `master_seed`, `master_seed_hex` はすべて同一のシード値を様々な形式で表現します。これらの形式はいずれも、[`rippled` API](http-websocket-apis.html) やいくつかの [他のXRP Ledgerソフトウェア](software-ecosystem.html) で [トランザクションの署名] (transactions.html#signing-and-submitting-transactions) に使用することができます。`master_`という接頭辞がついていますが、このシードが表す鍵は必ずしもアカウントのマスターキーではありません。この鍵ペアはレギュラーキーとして、あるいはマルチシグリストのメンバーとして使用することもできます。 +_シード_ 値は、アカウントの実際の秘密鍵と公開鍵を[導出](#鍵導出)するために使用される、コンパクトな値です。[wallet_proposeメソッド][]のレスポンスでは、`master_key`,`master_seed`,`master_seed_hex`はすべて同一のシード値を様々な形式で表現します。これらの形式はいずれも、[`rippled` API](http-websocket-apis.html)やいくつかの[他のXRP Ledgerソフトウェア](software-ecosystem.html)で[トランザクションの署名](transactions.html#トランザクションへの署名とトランザクションの送信)に使用することができます。`master_`という接頭辞がついていますが、このシードが表す鍵は必ずしもアカウントのマスターキーではありません。この鍵ペアはレギュラーキーとして、あるいはマルチシグリストのメンバーとして使用することもできます。 シード値は秘密情報であるため、非常に厳重に保管する必要があります。あるアドレスのシード値を知っている人は、そのアドレスを実質的に完全にコントロールすることができます。 @@ -54,7 +54,7 @@ _秘密鍵_ は、デジタル署名を作成するために使用される値 ### 公開鍵 -公開鍵は、電子署名の正当性を検証するために使用される値です。公開鍵は、鍵の導出の一部として秘密鍵から導出されます。[wallet_proposeメソッド][]のレスポンスでは、`public_key` と `public_key_hex` は両方とも同じ公開鍵の値を表します。 +公開鍵は、電子署名の正当性を検証するために使用される値です。公開鍵は、鍵の導出の一部として秘密鍵から導出されます。[wallet_proposeメソッド][]のレスポンスでは、`public_key`と`public_key_hex`は両方とも同じ公開鍵の値を表します。 XRP Ledgerのトランザクションには、ネットワークがトランザクションの署名を検証できるように、公開鍵が含まれている必要があります。公開鍵は有効な署名を作成するために使用することはできないので、公開しても問題はありません。 @@ -63,7 +63,7 @@ XRP Ledgerのトランザクションには、ネットワークがトランザ **アカウントID**は、[アカウント](accounts.html)またはキーペアの中核となる識別子です。これは公開鍵から派生します。XRP Ledgerのプロトコルでは、アカウントIDは20バイトのバイナリデータです。ほとんどのXRP Ledger APIは、アカウントIDをアドレスとして表現し、次の2つのフォーマットのうちの1つで表現します。 -- 「クラシックアドレス」は、[base58][]にチェックサム付きでアカウントIDを書きます。[wallet_proposeメソッド][]のレスポンスでは、これが `account_id` の値となります。 +- 「クラシックアドレス」は、[base58][]にチェックサム付きでアカウントIDを書きます。[wallet_proposeメソッド][]のレスポンスでは、これが`account_id`の値となります。 - 「X-Address」は、アカウントIDと[宛先タグ](source-and-destination-tags.html)を組み合わせ、チェックサムとともに[base58][]にその値を書き込みます。 どちらの形式でもチェックサムがあるため、わずかな変更でアドレスが無効になり、他の有効なアカウントと入れ替わる可能性はありません。これにより、タイプミスや送信エラーが発生しても、間違った場所に送金されることはありません。 @@ -78,11 +78,12 @@ XRP Ledgerは、複数の[暗号署名アルゴリズム](#署名アルゴリズ [wallet_proposeメソッド][]の`key_type`フィールドは、使用する暗号化署名アルゴリズムを指します。 + ## マスターキーペア -マスターキーペアは、秘密鍵と公開鍵で構成されています。アカウントのアドレスは、そのアカウントのマスターキーペアから得られるので、両者は[本質的な関係](accounts.html#アドレスのエンコード)となります。マスターキーペアの変更・削除はできませんが、無効にすることはできます。 +マスターキーペアは、秘密鍵と公開鍵で構成されています。アカウントのアドレスは、そのアカウントのマスターキーペアから得られるので、両者は[本質的な関係](addresses.html#アドレスのエンコード)となります。マスターキーペアの変更・削除はできませんが、無効にすることはできます。 -[wallet_proposeメソッド][]は、マスターキーペアを生成する方法の1つです。このメソッドからの応答には、アカウントのシード、アドレス、マスター公開鍵が一緒に表示されます。マスターキーペアを設定する他の方法については、[安全な署名の設定](secure-signing.html) を参照してください。 +[wallet_proposeメソッド][]は、マスターキーペアを生成する方法の1つです。このメソッドからの応答には、アカウントのシード、アドレス、マスター公開鍵が一緒に表示されます。マスターキーペアを設定する他の方法については、[安全な署名の設定](secure-signing.html)を参照してください。 **注意:** 悪意のある行為者があなたのマスター秘密鍵(またはシード)を知った場合、マスター鍵ペアが無効化されていない限り、彼らはあなたのアカウントを完全にコントロールすることができます。彼らはあなたのアカウントが保持している全ての資金を盗み、その他の回復不能な損害を与えることができます。秘密鍵は慎重に扱ってください! @@ -90,6 +91,8 @@ XRP Ledgerは、複数の[暗号署名アルゴリズム](#署名アルゴリズ マスターキーペアをオフラインで保管する際には、不正使用者がアクセスできる場所に秘密情報(パスフレーズ、シード、秘密鍵)を保管しないようにします。たとえば、インターネットに一切接続されない物理的に隔離されたマシンに保管したり、紙に記入して安全な場所に保管します。一般的には、インターネットと相互にやり取りをするコンピュータプログラムがアクセスできる範囲内には保管しません。マスターキーペアは、緊急時(漏えいの恐れがある場合や実際に漏えいが発生した場合にレギュラーキーペアを変更するなど)に限り、最も信頼できるデバイスでのみ使用することが理想的です。 + + ### 特殊な権限 **マスターキーペア**のみが、ある特定の処理を行うトランザクションを承認することができます。 @@ -102,7 +105,8 @@ XRP Ledgerは、複数の[暗号署名アルゴリズム](#署名アルゴリズ - トランザクションコスト0XRPの特別な[キーリセットトランザクション](transaction-cost.html#key-resetトランザクション)を送信する。 -レギュラーキーや[マルチシグ](multi-signing.html)は、マスターキーペアと同じようにその他の処理を行うことができます。特に、マスターキーペアを無効にした後、レギュラーキーペアやマルチシグを使用して再び有効にすることができます。また、削除の条件を満たしていれば、[アカウントの削除](accounts.html#アカウントの削除)を行うことも可能です。 +レギュラーキーや[マルチシグ](multi-signing.html)は、マスターキーペアと同じようにその他の処理を行うことができます。特に、マスターキーペアを無効にした後、レギュラーキーペアやマルチシグを使用して再び有効にすることができます。また、削除の条件を満たしていれば、[アカウントの削除](deleting-accounts.html)を行うことも可能です。 + ## レギュラーキーペア @@ -114,8 +118,7 @@ XRP Ledgerアカウントは、_レギュラーキーペア_ と呼ばれるセ レギュラーキーペアは、マスターキーペアと同じ形式です。生成方法も同じです(例えば、[wallet_proposeメソッド][]を使用します)。唯一の違いは、レギュラーキーペアは、トランザクションに署名するアカウントと本質的に結びついていないことです。あるアカウントのマスターキーペアを別のアカウントの通常キーペアとして使用することは可能です(ただし、推奨されるものではありません)。 -[SetRegularKeyトランザクション][]は、アカウントのレギュラーキーペアを割り当てたり変更したりします。レギュラーキーペアの割り当てまたは変更に関するチュートリアルは、[レギュラーキーペアの割り当て -](assign-a-regular-key-pair.html)を参照してください。 +[SetRegularKeyトランザクション][]は、アカウントのレギュラーキーペアを割り当てたり変更したりします。レギュラーキーペアの割り当てまたは変更に関するチュートリアルは、[レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)をご覧ください ## 署名アルゴリズム @@ -131,7 +134,8 @@ XRP Ledgerでは次の暗号化署名アルゴリズムがサポートされて [wallet_proposeメソッド][]を使用してキーペアを生成するときには、キーの生成に使用する暗号化署名アルゴリズムを選択するため`key_type`を指定できます。デフォルト以外のキータイプを生成した場合は、トランザクションに署名する際に`key_type`も指定する必要があります。 -XRP Ledgerでは、サポートされているさまざまなタイプのキーペアは、マスターキーペア、レギュラーキーペア、署名者リストメンバーとして互換的に使用できます。[アドレス生成](accounts.html#アドレスのエンコード)プロセスは、secp256k1キーペアとEd25519キーペアでは同一です。 +XRP Ledgerでは、サポートされているさまざまなタイプのキーペアは、マスターキーペア、レギュラーキーペア、署名者リストメンバーとして互換的に使用できます。[アドレス生成](addresses.html#アドレスのエンコード)プロセスは、secp256k1キーペアとEd25519キーペアでは同一です。 + ### 将来のアルゴリズム @@ -147,38 +151,37 @@ XRP Ledgerでは、サポートされているさまざまなタイプのキー ここで説明する鍵導出プロセスは、さまざまなプログラミング言語で複数の場所に実装されています。 - C++: `rippled`コードベース: - - [シード定義](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/Seed.h) - - [汎用キー & Ed25519鍵導出](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp) - - [secp256k1鍵導出](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp) -- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/py/key_derivation.py)。 -- JavaScript: [`ripple-keypairs`](https://github.com/XRPLF/xrpl.js/tree/main/packages/ripple-keypairs)パッケージ。 + - [シード定義](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/Seed.h) + - [汎用キー & Ed25519鍵導出](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp) + - [secp256k1鍵導出](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp) +- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/py/key_derivation.py) +- JavaScript: [`ripple-keypairs`](https://github.com/XRPLF/xrpl.js/tree/main/packages/ripple-keypairs)パッケージ ### Ed25519鍵導出 [[ソース]](https://github.com/XRPLF/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/protocol/impl/SecretKey.cpp#L203 "Source") -[![パスフレーズ → シード → 秘密鍵 → プレフィクス + 公開鍵](img/key-derivation-ed25519.ja.png)](img/key-derivation-ed25519.ja.png) +{{ include_svg("img/key-derivation-ed25519.ja.svg", "パスフレーズ → シード → 秘密鍵 → プレフィクス + 公開鍵") }} 1. シード値の[SHA-512ハーフ][]を計算します。32バイトの秘密鍵が導出されます。 - **ヒント:** 32バイトの数値はすべて、有効なEd25519秘密鍵です。ただし、秘密鍵として使用する上で安全なのは、十分ランダムに選択された数値のみです。 + **ヒント:** 32バイトの数値はすべて、有効なEd25519秘密鍵です。ただし、秘密鍵として使用する上で安全なのは、十分ランダムに選択された数値のみです。 2. Ed25519公開鍵を計算するには、[Ed25519](https://ed25519.cr.yp.to/software.html)の標準公開鍵を導出して、32バイトの公開鍵を導出します。 - **注意:** 暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519やsecp256k1が実装されています。 + **注意:** 暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519やsecp256k1が実装されています。 3. Ed25519公開鍵を示すには、32バイトの公開鍵の前にシングルバイトのプレフィクス`0xED`を付加し、33バイトにします。 - トランザクションに署名するコードを実装している場合は、プレフィクス`0xED`を削除し、実際の署名プロセスに32バイトキーを使用します。 + トランザクションに署名するコードを実装している場合は、プレフィクス`0xED`を削除し、実際の署名プロセスに32バイトキーを使用します。 4. アカウントの公開鍵を[base58][]にシリアル化する場合は、アカウントの公開鍵プレフィクス`0x23`を使用します。 - バリデータの一時キーにEd25519を使用することはできません。 + バリデータの一時キーにEd25519を使用することはできません。 ### secp256k1鍵導出 - [[ソース]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp "Source") -[![パスフレーズ → シード → ルートキーペア → 仲介銀行(機関)キーペア → マスターキーペア](img/key-derivation-secp256k1.ja.png)](img/key-derivation-secp256k1.ja.png) +{{ include_svg("img/key-derivation-secp256k1.ja.svg", "パスフレーズ → シード → ルートキーペア → 仲介銀行(機関)キーペア → マスターキーペア") }} XRP Ledgerアカウントキーでのsecp256k1鍵導出に、Ed25519鍵導出よりも多くの手順が含まれる理由は次のとおりです。 @@ -189,24 +192,23 @@ XRP Ledgerアカウントキーでのsecp256k1鍵導出に、Ed25519鍵導出よ 1. 次のように、シード値から「ルートキーペア」を計算します。 - 1. 以下を順番に連結して、合計20バイトにします。 + 1. 以下を順番に連結して、合計20バイトにします。 + - シード値(16バイト) + - 「ルートシーケンス」値(4バイト)。ビッグエンディアンの符号なし整数。ルートシーケンスの開始値として0を使用します。 - - シード値(16バイト) - - 「ルートシーケンス」値(4バイト)。ビッグエンディアンの符号なし整数。ルートシーケンスの開始値として0を使用します。 + 2. 連結された(シード+ルートシーケンス)値の[SHA-512ハーフ][]を計算します。 - 2. 連結された(シード+ルートシーケンス)値の[SHA-512ハーフ][]を計算します。 + 3. 結果が有効なsecp256k1秘密鍵でない場合は、ルートシーケンスを1増やして最初からやり直します。[[ソース]](https://github.com/XRPLF/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/crypto/impl/GenerateDeterministicKey.cpp#L103 "Source") - 3. 結果が有効なsecp256k1秘密鍵でない場合は、ルートシーケンスを1増やして最初からやり直します。[[ソース]](https://github.com/XRPLF/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/crypto/impl/GenerateDeterministicKey.cpp#L103 "Source") + 有効なsecp256k1鍵は0であってはならず、 _secp256k1グループ_ の数値順よりも低くなければなりません。secp256k1グループの順序は、定数`0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`です。 - 有効なsecp256k1鍵は0であってはならず、 _secp256k1グループ_ の数値順よりも低くなければなりません。secp256k1グループの順序は、定数`0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`です。 + 4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、ルート公開鍵を導出します。(暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。) - 4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、ルート公開鍵を導出します。(暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。) - - **ヒント:** バリデータではこのルートキーペアを使用します。バリデータのキーペアを計算する場合は、ここで停止できます。この2つのタイプの公開鍵を区別するには、バリデータの公開鍵の[base58][]シリアル化でプレフィクス`0x1c`を使用します。 + **ヒント:** バリデータではこのルートキーペアを使用します。バリデータのキーペアを計算する場合は、ここで停止できます。この2つのタイプの公開鍵を区別するには、バリデータの公開鍵の[base58][]シリアル化でプレフィクス`0x1c`を使用します。 2. ルート公開鍵を33バイトの圧縮形式に変換します。 - ECDSA公開鍵の非圧縮形式は、32バイト整数のペア(X座標とY座標)で構成されます。圧縮形式は、X座標と1バイトのプレフィクスのみで構成されます。Y座標が偶数の場合は`0x02`、Y座標が奇数の場合は`0x03`です。 + ECDSA公開鍵の非圧縮形式は、32バイト整数のペア(X座標とY座標)で構成されます。圧縮形式は、X座標と1バイトのプレフィクスのみで構成されます。Y座標が偶数の場合は`0x02`、Y座標が奇数の場合は`0x03`です。 非圧縮形式の公開鍵を圧縮形式に変換するには、`openssl`コマンドラインツールを使用します。例えば、非圧縮の公開鍵がファイル`ec-pub.pem`にある場合は、次のような圧縮形式を出力できます。 @@ -214,28 +216,28 @@ XRP Ledgerアカウントキーでのsecp256k1鍵導出に、Ed25519鍵導出よ 3. 次のように、圧縮されたルート公開鍵から「仲介銀行(機関)キーペア」を導出します。 - 1. 以下を順番に連結して、合計40バイトにします。 - - 圧縮されたルート公開鍵(33バイト) - - `0x00000000000000000000000000000000` (4バイトのゼロ)(この値は、同じファミリーの異なるメンバーの導出に使用することを目的としていましたが、実際には値0のみが使用されます。) - - 「キーシーケンス」値(4バイト)。ビッグエンディアンの符号なし整数。キーシーケンスの開始値として0を使用します。 + 1. 以下を順番に連結して、合計40バイトにします。 + - 圧縮されたルート公開鍵(33バイト) + - `0x00000000000000000000000000000000`(4バイトのゼロ)(この値は、同じファミリーの異なるメンバーの導出に使用することを目的としていましたが、実際には値0のみが使用されます。) + - 「キーシーケンス」値(4バイト)。ビッグエンディアンの符号なし整数。キーシーケンスの開始値として0を使用します。 - 2. 連結された値の[SHA-512ハーフ][]を計算します。 + 2. 連結された値の[SHA-512ハーフ][]を計算します。 - 3. 結果が有効なsecp256k1秘密鍵でない場合は、キーシーケンスを1増やし、アカウントの仲介銀行(機関)キーペアの導出をやり直します。 + 3. 結果が有効なsecp256k1秘密鍵でない場合は、キーシーケンスを1増やし、アカウントの仲介銀行(機関)キーペアの導出をやり直します。 - 4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、仲介銀行(機関)公開鍵を導出します。(暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。) + 4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、仲介銀行(機関)公開鍵を導出します。(暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。) 4. 仲介銀行(機関)公開鍵をルート公開鍵に追加して、マスター公開鍵ペアを導出します。同様に、仲介銀行(機関)秘密鍵をルート秘密鍵に追加して秘密鍵を導出します。 - - ECDSA秘密鍵は非常に大きな整数値であるため、secp256k1グループ順序を法として2つの秘密鍵を合計することで、2つの秘密鍵の合計を計算できます。 + - ECDSA秘密鍵は非常に大きな整数値であるため、secp256k1グループ順序を法として2つの秘密鍵を合計することで、2つの秘密鍵の合計を計算できます。 - - ECDSA公開鍵は楕円曲線上の点であるため、楕円曲線の数値を使用して点の合計値を計算する必要があります。 + - ECDSA公開鍵は楕円曲線上の点であるため、楕円曲線の数値を使用して点の合計値を計算する必要があります。 5. 以前と同様に、マスター公開鍵を33バイトの圧縮形式に変換します。 6. アカウントの公開鍵を[base58][]形式にシリアル化する場合は、アカウントの公開鍵プレフィクス`0x23`を使用します。 - アカウントの公開鍵からそのアドレスに変換するための情報とサンプルコードについては、[アドレスのエンコード](accounts.html#アドレスのエンコード)を参照してください。 + アカウントの公開鍵からそのアドレスに変換するための情報とサンプルコードについては、[アドレスのエンコード](addresses.html#アドレスのエンコード)を参照してください。 ## 関連項目 diff --git a/content/@i18n/ja/concepts/accounts/deleting-accounts.md b/content/@i18n/ja/concepts/accounts/deleting-accounts.md new file mode 100644 index 0000000000..851a81b8fe --- /dev/null +++ b/content/@i18n/ja/concepts/accounts/deleting-accounts.md @@ -0,0 +1,42 @@ +--- +html: deleting-accounts.html +parent: accounts.html +blurb: XRP Ledgerのアカウントの削除について。 +labels: + - アカウント +--- +# アカウントの削除 + +アカウントの所有者は[AccountDeleteトランザクション][]を送信することで、レジャーからアカウントと関連するエントリーを削除し、アカウントの残りのXRP残高のほとんどを別のアカウントに送ることができます。アカウントの無駄な作成と削除を抑止するため、アカウントの削除には[トランザクションコスト](transaction-cost.html)として通常よりも多くのXRPをバーンする必要があります。 + +いくつかの種類のレジャーエントリーを保有している場合、アカウントの削除がブロックされます。たとえば、(代替可能)トークンの発行者は、そのトークンの発行残高がゼロでなければ、削除することはできません。 +アカウントは削除した後、通常の[アカウントの作成方法](accounts.html#creating-accounts)によって再作成できます。削除後に再作成されたアカウントと、初めて作成されたアカウントに違いはありません。 + + + +## 要件 + +アカウントを削除するには、次の条件を満たす必要があります。 + +- アカウントの`Sequence`番号に256を加えた値が、現在の[レジャーインデックス][]未満であること。 +- アカウントが次の[レジャーエントリー](ledger-object-types.html)のいずれも(送金元または受取人として)保有していないこと。 + - `Escrow` + - `PayChannel` + - `RippleState` + - `Check` +- アカウントがレジャー内に所有するオブジェクトが1000個未満であること。 +- トランザクションの送信時、少なくとも1つ分の[所有者準備金](reserves.html)(現在2XRP)に相当する特別な[トランザクションコスト][]を支払う必要があります。 + + +## 削除コスト + +**注意:** アカウントの削除要件を満たしていないためにトランザクションが失敗した場合でも、[AccountDeleteトランザクション][]のトランザクションコストは、トランザクションが検証済みレジャーに含まれる場合常に発生します。アカウントを削除できなかった場合に高いトランザクションコストを支払う可能性を減らすには、AccountDeleteトランザクションを送信するときに`fail_hard`オプションを使用してください。 + +ビットコインや他の多くの暗号通貨とは異なり、XRP Ledgerの公開レジャーチェーンのそれぞれの新しいレジャーバージョンは、レジャーの完全な状態を含んでおり、新しいアカウントが増えるごとにサイズが増加します。そのため、必要な場合を除き、新しいXRP Ledgerアカウントを作成すべきではありません。アカウントを削除することで、アカウントの10XRPの[準備金](reserves.html)の一部を回復することができますが、そのためには少なくとも2XRPを破棄する必要があります。 + +取引所など、多くのユーザのために価値の送受信を行う組織は、[**送信元タグ**と**宛先タグ**](source-and-destination-tags.html)を使用することで、XRP Ledgerのアカウントを1つだけ(または少数)使用するだけで、ユーザの支払いを区別することができます。 + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/accounts/depositauth.ja.md b/content/@i18n/ja/concepts/accounts/depositauth.md similarity index 86% rename from content/concepts/accounts/depositauth.ja.md rename to content/@i18n/ja/concepts/accounts/depositauth.md index 9a52f5ea16..fccfe2f263 100644 --- a/content/concepts/accounts/depositauth.ja.md +++ b/content/@i18n/ja/concepts/accounts/depositauth.md @@ -8,9 +8,12 @@ labels: --- # Deposit Authorization -_([DepositAuth Amendment][]が必要です。)_ +_([DepositAuth Amendment][]により追加されました。)_ -Deposit Authorization は、XRP Ledgerの[アカウント](accounts.html)のオプション機能です。Deposit Authorizationが有効な場合、トランザクションはそのトランザクションの送信者がアカウント自体でない限り、アカウントへはどのような資産も送信できません。これには、XRPと発行済み通貨の送金が含まれます。 +Deposit Authorizationは、XRP Ledgerの[アカウント](accounts.html)のオプション機能です。Deposit Authorizationが有効な場合、トランザクションはそのトランザクションの送信者がアカウント自体でない限り、アカウントへはどのような資産も送信できません。Deposit Authorizationのアカウントは、次の2つの方法でのみ入金することができます。 + +- [事前承認](#事前承認)されたアカウントから。 +- トランザクションを送信して資金を受け取ることにより。例えば、Deposit Authorizationが設定されたアカウントは、他のアカウントによって開始された[エスクロー](escrow.html)を完了することができます。 デフォルトでは、新しいアカウントではDepositAuthが無効になっています。 @@ -22,7 +25,7 @@ Deposit Authorizationフラグにより、XRP Ledgerを使用するユーザー Deposit Authorizationを有効にすると、[Checks](known-amendments.html#checks)、[Escrow](escrow.html)、および[Payment Channel](known-amendments.html#paychan)から資金を受領できます。このような「二段階」トランザクションモデルでは、最初に送金元は資金の送金を承認するトランザクションを送信し、次に送金先は資金受領を承認するトランザクションを送信します。 -Deposit Authorizationが有効になっている場合に[Paymentトランザクション][]から資金を受領するには、このような支払の送金元を[事前承認](#事前承認)する必要があります。_([DepositPreauth Amendment][]が必要です。)_ +Deposit Authorizationが有効になっている場合に[Paymentトランザクション][]から資金を受領するには、このような支払の送金元を[事前承認](#事前承認)する必要があります。_([DepositPreauth Amendment][]により追加されました。)_ ## 推奨される使い方 @@ -37,18 +40,18 @@ Deposit Authorizationを最大限に活用するため、以下の実施を推 Deposit Authorizationが有効化されているアカウントの特徴は次のとおりです。 - [Paymentトランザクション][]の送信先には**できません**。ただし**以下の例外**は除きます。 - - 送金先により、支払の送金元が[事前承認](#事前承認)されている場合。_([DepositPreauth Amendment][]が必要です)_ - - アカウントのXRP残高がアカウントの最低[必要準備金](reserves.html)以下で、XRP PaymentのAmountがアカウントの最低準備金(現時点では10 XRP)以下である場合は、このアカウントを送金先に指定できます。これにより、アカウントがトランザクションを送信することも、XRPを受領することもできずに操作不可能な状態になるのを防ぎます。この場合、アカウントの所有者の準備金は関係ありません。 + - 送金先により、支払の送金元が[事前承認](#事前承認)されている場合。_([DepositPreauth Amendment][]により追加されました。)_ + - アカウントのXRP残高がアカウントの最低[必要準備金](reserves.html)以下で、XRP PaymentのAmountがアカウントの最低準備金(現時点では10XRP)以下である場合は、このアカウントを送金先に指定できます。これにより、アカウントがトランザクションを送信することも、XRPを受領することもできずに操作不可能な状態になるのを防ぎます。この場合、アカウントの所有者の準備金は関係ありません。 - **以下に該当する場合にのみ**[PaymentChannelClaimトランザクション][]からXRPを受領できます。 - PaymentChannelClaimトランザクションの送金元がPayment Channelの送金先である場合。 - - PaymentChannelClaimトランザクションの送金先がPaymentChannelClaimの送金元を[事前承認している](#事前承認)場合。_([DepositPreauth Amendment][]が必要です)_ + - PaymentChannelClaimトランザクションの送金先がPaymentChannelClaimの送金元を[事前承認している](#事前承認)場合。_([DepositPreauth Amendment][]により追加されました。)_ - **以下に該当する場合にのみ**[EscrowFinishトランザクション][]からXRPを受領できます。 - EscrowFinishトランザクションの送金元がEscrowの送金先である場合。 - - EscrowFinishトランザクションの送金先がEscrowFinishの送金元を[事前承認している](#事前承認)場合。_([DepositPreauth Amendment][]が必要です)_ -- [CheckCash][]トランザクションを送信してXRPまたは発行済み通貨を受領**できます**。 _([Checks Amendment][]が必要です:有効ではありません:)_ -- [OfferCreateトランザクション][]を送信してXRPまたは発行済み通貨を受領**できます**。 - - 即時には完全に実行されないOfferCreateトランザクションがアカウントから送信される場合、このアカウントは、後でオファーが他のアカウントの[Payment][]トランザクションと[OfferCreate][]トランザクションによって消費される時点で、注文済みXRPと発行済み通貨のリマインダーを受信する**ことがあります**。 -- アカウントが[NoRippleフラグ](rippling.html)を有効にせずにトラストラインを作成している場合、またはDefaultRippleフラグを有効にして通貨を発行した場合は、アカウントはRipplingの結果として、[Paymentトランザクション][]でそれらのトラストラインの発行済み通貨を受領**できます**。このようなトランザクションの送金先にすることはできません。 + - EscrowFinishトランザクションの送金先がEscrowFinishの送金元を[事前承認している](#事前承認)場合。_([DepositPreauth Amendment][]により追加されました。)_ +- [CheckCash][]トランザクションを送信してXRPまたはトークンを受領**できます**。 _([Checks Amendment][]により追加されました。)_ +- [OfferCreateトランザクション][]を送信してXRPまたはトークンを受領**できます**。 + - 即時には完全に実行されないOfferCreateトランザクションがアカウントから送信される場合、このアカウントは、後でオファーが他のアカウントの[Payment][]トランザクションと[OfferCreate][]トランザクションによって消費される時点で、注文済みXRPとトークンのリマインダーを受信する**ことがあります**。 +- アカウントが[NoRippleフラグ](rippling.html)を有効にせずにトラストラインを作成している場合、またはDefaultRippleフラグを有効にして通貨を発行した場合は、アカウントはRipplingの結果として、[Paymentトランザクション][]でそれらのトラストラインのトークンを受領**できます**。このようなトランザクションの送金先にすることはできません。 - 一般的に、以下のすべての条件に該当する場合は、XRP LedgerのアカウントはXRP LedgerでXRP以外の通貨を受領**できません**。(このルールは、DepositAuthフラグに特有のものではありません。) - アカウントにより、ゼロ以外の限度を指定したトラストラインが作成されていない。 - アカウントが、その他のアカウントにより作成されたトラストラインで通貨を発行していない。 @@ -72,7 +75,7 @@ Deposit Authorizationが有効化されているアカウントの特徴は次 ## 事前承認 -_([DepositPreauth Amendment][]が必要です。)_ +_([DepositPreauth Amendment][]により追加されました。)_ DepositAuthが有効なアカウントは、特定の送金元を _事前承認_ することにより、DepositAuthが有効になっていても、これらの送金元からの支払を受領することができます。これにより、特定の送金元からの資金の直接送金が可能となり、受取人はトランザクションごとに個別にアクションを実行する必要がなくなります。事前承認はDepositAuthの使用にあたり必須の要件ではありませんが、事前承認により特定の操作を実行しやすくなります。 diff --git a/content/concepts/transactions/multi-signing.ja.md b/content/@i18n/ja/concepts/accounts/multi-signing.md similarity index 100% rename from content/concepts/transactions/multi-signing.ja.md rename to content/@i18n/ja/concepts/accounts/multi-signing.md diff --git a/content/@i18n/ja/concepts/accounts/reserves.md b/content/@i18n/ja/concepts/accounts/reserves.md new file mode 100644 index 0000000000..37592854ec --- /dev/null +++ b/content/@i18n/ja/concepts/accounts/reserves.md @@ -0,0 +1,83 @@ +--- +html: reserves.html +parent: accounts.html +blurb: XRP Ledgerのアカウントでは、レジャーデータ内のスパムを減らすためにXRPの準備金が必要です。 +labels: + - 手数料 + - アカウント +top_nav_grouping: 人気ページ +--- +# 準備金 + +XRP Ledgerでは、スパムや悪意のある使用によって、共有グローバル台帳(レジャー)が過度に大きくならないように、XRPを用いた _準備金_ の仕組みを採用しています。現在一般に市販されているのマシンで、処理中の現行レジャーを常にRAMに保存でき、全履歴がディスクに収まるように、技術の向上に合わせて台帳サイズが大きくなるのを制限することが目的です。 + +取引(トランザクション)を送信するには、各アドレスが共有グローバル台帳内に少量のXRPを保有している必要があります。このXRPを他のアドレスに送信することはできません。新しいアドレスに資金供給するには、必要となる準備金を満たすのに十分なXRPを送信する必要があります。 + +準備金要件は、バリデータが新しい準備金設定に合意する[手数料の投票](fee-voting.html)プロセスにより、随時変更されます。 + +## 基本準備金と所有者準備金 + +準備金は2つの部分に分けられます。 + +* **基本準備金**は、レジャーの各アドレスに必要なXRPの最小額です。 +* **所有者準備金**は、アドレスがレジャーに所有しているオブジェクトごとに必要な準備金の増加額です。アイテムごとのコストは「増分準備金」とも呼ばれます。 + +メインネットにおける現在の準備金要件は次の通りです。 + +- 基本準備金 **10 XRP** +- 所有者準備金 アイテムにつき**2 XRP** + +他のネットワークでの準備金は異なる場合があります。 + +### 所有者準備金 + +レジャー内の多くのオブジェクト(レジャーエントリー)は、特定のアカウントが所有しています。通常、所有者はオブジェクトを作成したアカウントです。各オブジェクトは、所有者の合計必要準備金を所有者準備金によって増加させます。オブジェクトがレジャーから削除されると、所有者の必要準備金にカウントされなくなります。 + +所有者の必要準備金にカウントされるオブジェクトには次のものが含まれます。[Check](checks.html), [入金の事前承認](depositauth.html#事前承認), [エスクロー](escrow.html), [NFTのオファー](non-fungible-token-transfers.html), [NFTのページ](non-fungible-tokens.html), [オファー](offer.html), [ペイメントチャネル](payment-channels.html), [マルチシグの署名者リスト](multi-signing.html), [Ticket](tickets.html), そして[トラストライン](trust-lines-and-issuing.html). + +次のようないくつかの特殊なケースが存在します。 + +- 非代替性トークン(NFT)は、それぞれ最大32個のNFTを含むページにグループ化され、所有者準備金はNFTごとではなくページごとに適用されます。ページの分割と結合の仕組みにより、実際に保存されるNFTの数はページごとに異なります。[NFTokenPageオブジェクトの準備金](nftokenpage.html#nftokenpage-オブジェクトの準備金)もご覧ください。 +- トラストライン(`RippleState`エントリ)は2つのアカウント間で共有されます。所有者準備金はどちらか一方、または両方に適用できます。多くの場合、トークン所有者は準備金を負担し、発行者は負担しません。[RippleState: 所有者準備金への資金提供](ripplestate.html#所有者の準備金への資金供給)もご覧ください。 +- 2019年4月に有効化された[MultiSignReserve amendment][]以前に作成された署名者リストは、複数のオブジェクトとしてカウントされます。[署名者リストと準備金](signerlist.html#signerlistと準備金)もご覧ください。 +- [所有者ディレクトリ](directorynode.html)は、アカウントが所有するすべてのオブジェクトを含む、アカウントに関連するすべてのオブジェクトをリストしたレジャーエントリーです。ただし、所有者ディレクトリ自体は準備金にカウントされません。 + +### 準備金の確認 + +アプリケーションは、[server_infoメソッド][]または[server_stateメソッド][]を使用して、現在の基本準備金と増分準備金の値を調べることができます。 + +| メソッド | 単位 | 基本準備金のフィールド | 増分準備金のフィールド | +|-------------------------|--------------|-------------------------------------|------------------------------------| +| [server_infoメソッド][] | 10進数のXRP値 | `validated_ledger.reserve_base_xrp` | `validated_ledger.reserve_inc_xrp` | +| [server_stateメソッド][] | 整数のdrop値 | `validated_ledger.reserve_base` | `validated_ledger.reserve_inc` | + +アカウントの所有者準備金を決定するには、増分準備金にアカウントが所有するオブジェクトの数を掛けます。アカウントが所有しているオブジェクトの数を調べるには、[account_infoメソッド][]を呼び出し、`account_data.OwnerCount`を取得します。 + +アドレスの必要となる合計準備金を計算するには、`OwnerCount`に`reserve_inc_xrp`を掛け、次に`reserve_base_xrp`を加えます。[この計算をPythonで行うデモ](build-a-desktop-wallet-in-python.html#codeblock-17)があります。 + + +## 必要準備金を下回る + +トランザクション処理中、[トランザクションコスト](transaction-cost.html)によって、送信元アドレスのXRP残高の一部がバーンされます。その結果、そのアドレスのXRPが必要準備金を下回る可能性があります。 + +アドレスが保持しているXRPが、現在の必要準備金を下回ると、XRPを他のアドレスに送信するトランザクションを送信したり、自身の準備金を増やしたりできなくなります。このような場合でも、そのアドレスはレジャー内に存在し、トランザクションコストを支払うのに十分なXRPを持っている限り、その他のトランザクションを送信することができます。必要準備金を満たすために十分なXRPを受け取った場合、またはそのアドレスのXRP保有額よりも[準備金の必要額が減少した](#準備金要件の変更)場合、そのアドレスはすべてのタイプのトランザクションを再度送信できるようになります。 + +**ヒント:** アドレスが必要準備金を下回った場合は、新しい[OfferCreateトランザクション][]を送信して、追加のXRP、または既存のトラストライン上の他の通貨を入手することができます。このような取引では、新しい[トラストライン](ripplestate.html)や[レジャー内のオファーエントリー](offer.html)を作成することはできないため、すでにオーダーブック内にあるオファーを実行するトランザクションのみを実行することができます。 + + +## 準備金要件の変更 + +XRP Ledgerには、準備金要件を調整する仕組みがあります。このような調整は、例えばXRPの価値の長期的な変化、汎用レベルのハードウェアの性能の向上、サーバソフトウェアの実装の効率化などを考慮することができます。いかなる変更も、コンセンサスプロセスによる合意が必要です。詳細は[手数料の投票](fee-voting.html)をご覧ください。 + +## 関連項目 + +- [account_objectsメソッド][] +- [AccountRootオブジェクト][] +- [手数料の投票](fee-voting.html) +- [SetFee疑似トランザクション][]疑似トランザクション +- [チュートリアル: 必要準備金の計算と表示(Python)](build-a-desktop-wallet-in-python.html#3-display-an-account) + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/transactions/tickets.ja.md b/content/@i18n/ja/concepts/accounts/tickets.md similarity index 99% rename from content/concepts/transactions/tickets.ja.md rename to content/@i18n/ja/concepts/accounts/tickets.md index cfbfee1cc0..01595a4a2e 100644 --- a/content/concepts/transactions/tickets.ja.md +++ b/content/@i18n/ja/concepts/accounts/tickets.md @@ -8,7 +8,7 @@ labels: --- # Ticket -_([TicketBatch amendment][]が必要です。)_ +_([TicketBatch amendment][]により追加されました。)_ XRP Ledgerのチケットは、取引をすぐに送信せずに、その取引のために[シーケンス番号][Sequence Number]を確保する方法です。チケットを使うことで、通常の順序以外で取引を送信することができます。この使用例としては、必要な署名を集めるのに時間がかかるような[マルチサイン取引](multi-signing.html)などが挙げられます。 diff --git a/content/concepts/consensus-protocol/consensus-principles-and-rules.ja.md b/content/@i18n/ja/concepts/consensus-protocol/consensus-principles-and-rules.md similarity index 100% rename from content/concepts/consensus-protocol/consensus-principles-and-rules.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/consensus-principles-and-rules.md diff --git a/content/concepts/consensus-protocol/consensus-protections.ja.md b/content/@i18n/ja/concepts/consensus-protocol/consensus-protections.md similarity index 87% rename from content/concepts/consensus-protocol/consensus-protections.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/consensus-protections.md index e526381631..0b291b3c6b 100644 --- a/content/concepts/consensus-protocol/consensus-protections.ja.md +++ b/content/@i18n/ja/concepts/consensus-protocol/consensus-protections.md @@ -32,11 +32,11 @@ _バリデータ_ とは、新しいレジャーバージョンの決定プロ ## ソフトウェアの脆弱性 -あらゆるソフトウェアシステムと同様に、XRP Ledgerコンセンサスプロトコル、広く導入されているソフトウェアパッケージ、またはその依存関係の実装に伴うバグ(または意図的に悪意のあるコード)の問題には、真剣に取り組む必要があります。巧妙に作成された入力を取り込んだサーバーをクラッシュさせるだけのバグであっても、ネットワークの進捗を妨害する目的で悪用される可能性があります。Rippleではこのような脅威に対処するため、次のようなさまざまな対策を導入しています。 +あらゆるソフトウェアシステムと同様に、XRP Ledgerコンセンサスプロトコル、広く導入されているソフトウェアパッケージ、またはその依存関係の実装に伴うバグ(または意図的に悪意のあるコード)の問題には、真剣に取り組む必要があります。巧妙に作成された入力を取り込んだサーバーをクラッシュさせるだけのバグであっても、ネットワークの進捗を妨害する目的で悪用される可能性があります。XRP Ledgerの開発者はこのような脅威に対処するため、次のようなさまざまな対策を導入しています。 - [オープンソースコードベース](https://github.com/XRPLF/rippled/)。これにより、一般のユーザーが関連ソフトウェアをレビュー、コンパイルし、個別にテストできます。 - 公式XRP Ledgerリポジトリのあらゆる変更のための綿密で堅固なコードレビュープロセス。 -- すべてのリリースと公式ソフトウェアパッケージへのRipple社員によるデジタル署名付与。 +- 著名な開発者によるすべてのリリースと公式ソフトウェアパッケージへのデジタル署名付与。 - セキュリティの脆弱性と不安定さに関する定期的に委託された専門家レビュー。 - 責任を持って脆弱性を公開したセキュリティ研究者に報奨金を授与する[Bug Bountyプログラム](https://ripple.com/bug-bounty/)。 @@ -57,9 +57,9 @@ _[シビル攻撃](https://en.wikipedia.org/wiki/Sybil_attack)_ とは、大量 ## バリデータ重複要件 -XRP Ledgerのすべての参加者が何を検証済みとみなすかについて合意するには、参加者はまず、他の参加者が選択したバリデータ群によく似た信頼できるバリデータ群を選択する必要があります。最悪のケースでは、重複が約90%未満のために一部の参加者間に不一致が生じる場合があります。このため、Rippleは推奨バリデータの署名付きリストを公開しています。このリストには、企業や業界、コミュニティが運用する信頼性が高く適切に管理されたサーバーが含まれます。 +XRP Ledgerのすべての参加者が何を検証済みとみなすかについて合意するには、参加者はまず、他の参加者が選択したバリデータ群によく似た信頼できるバリデータ群を選択する必要があります。最悪のケースでは、重複が約90%未満のために一部の参加者間に不一致が生じる場合があります。そのため、業界やコミュニティによって運営されている信頼できる、よくメンテナンスされたサーバを含むことを意味する、推奨バリデータの署名されたリストがあります。 -デフォルトでは、XRP LedgerサーバーはRippleが運用するバリデータリストサイトを使用するように設定されています。このサイトでは、Rippleが定期的に更新する推奨バリデータリスト(推奨 _ユニークノードリスト_ (UNL))が公開されています。このように設定されているサーバーは、最新バージョンのリストに含まれているすべてのバリデータを信頼します。これにより、同じリストを使用する他のサーバーと100%重複することが保証されます。デフォルトの設定には、サイトのコンテンツの真正性を検証する公開鍵が含まれています。サイトがダウンした場合、XRP Ledgerのピアツーピアネットワーク内のサーバー間でリストに対する署名済みの更新を直接中継できます。 +デフォルトでは、XRP LedgerサーバーはXRPL財団やRippleが運用するバリデータリストサイトを使用するように設定されています。各サイトでは定期的に更新する推奨バリデータリスト(推奨 _ユニークノードリスト_ (UNL))が公開されています。このように設定されているサーバーは、最新バージョンのリストに含まれているすべてのバリデータを信頼します。これにより、同じリストを使用する他のサーバーと100%重複することが保証されます。デフォルトの設定には、サイトのコンテンツの真正性を検証する公開鍵が含まれています。サイトがダウンした場合、XRP Ledgerのピアツーピアネットワーク内のサーバー間でリストに対する署名済みの更新を直接中継できます。 技術的には、サーバーを実行している場合、各自のリストサイトを設定するかまたは信頼できるバリデータを個別に明示的に選択することができますが、これらを行うことは推奨されません。選択したバリデータ群と他のサーバーとの重複が十分ではない場合、サーバーはネットワークの他の部分と不一致になる可能性があり、サーバーが不一致の状態でアクションを実行すると資金を失う可能性があります。 diff --git a/content/concepts/consensus-protocol/consensus-research.ja.md b/content/@i18n/ja/concepts/consensus-protocol/consensus-research.md similarity index 100% rename from content/concepts/consensus-protocol/consensus-research.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/consensus-research.md diff --git a/content/concepts/consensus-protocol/consensus-structure.ja.md b/content/@i18n/ja/concepts/consensus-protocol/consensus-structure.md similarity index 99% rename from content/concepts/consensus-protocol/consensus-structure.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/consensus-structure.md index dec713c9c7..248ef16e85 100644 --- a/content/concepts/consensus-protocol/consensus-structure.ja.md +++ b/content/@i18n/ja/concepts/consensus-protocol/consensus-structure.md @@ -19,7 +19,7 @@ XRP Ledger上でアプリケーションを構築する場合は、XRP Ledger AP ピアツーピアサーバーのXRP Ledgerネットワークは世界で共有されている台帳であり、ここから、アプリケーションはこの台帳の内容の状態に関して信頼できる情報を得ることができます。この状態に関する情報には以下の内容が含まれます。 - 各[アカウント](accounts.html)の設定 -- XRPおよび[発行済み通貨](issued-currencies.html)の残高 +- XRPおよび[トークン](tokens.html)の残高 - 分散型取引所でのオファー(注文) - ネットワーク設定(例: [トランザクションコスト](transaction-cost.html)と[準備金](reserves.html)の金額) - タイムスタンプ @@ -95,6 +95,9 @@ _図5: バリデータによるトランザクションセットの提案と修 - 合意済みのトランザクションセットから結果として生じるレジャーバージョンを計算する。 - 結果を比較し、十分に信頼できるバリデータが同意した場合はレジャーバージョンの検証済みを宣言する。 +ネットワーク内の各サーバは、それぞれ個別にローカルに検証を行います。 + + #### 検証の計算と共有 コンセンサスプロセスが完了すると、各サーバーは合意済みの一連のトランザクションから新しいレジャーを個別に計算します。各サーバーは、同じ規則に従って結果を次のように計算します。 @@ -172,7 +175,7 @@ XRP Ledgerに送信されたトランザクションはすぐには処理され - **コンセプト:** - [コンセンサスについて](consensus.html) - [コンセンサスの研究](consensus-research.html) - - [Rippleコンセンサスの動画](https://www.youtube.com/watch?v=pj1QVb1vlC0) + - [コンセンサスの仕組み(動画)](https://www.youtube.com/watch?v=pj1QVb1vlC0) - **チュートリアル:** - [信頼できるトランザクションの送信](reliable-transaction-submission.html) - [バリデータとしての`rippled`の実行](run-rippled-as-a-validator.html) diff --git a/content/concepts/consensus-protocol/fee-voting.ja.md b/content/@i18n/ja/concepts/consensus-protocol/fee-voting.md similarity index 100% rename from content/concepts/consensus-protocol/fee-voting.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/fee-voting.md diff --git a/content/concepts/consensus-protocol/consensus.ja.md b/content/@i18n/ja/concepts/consensus-protocol/index.md similarity index 100% rename from content/concepts/consensus-protocol/consensus.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/index.md diff --git a/content/concepts/consensus-protocol/invariant-checking.ja.md b/content/@i18n/ja/concepts/consensus-protocol/invariant-checking.md similarity index 100% rename from content/concepts/consensus-protocol/invariant-checking.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/invariant-checking.md diff --git a/content/concepts/consensus-protocol/negative-unl.ja.md b/content/@i18n/ja/concepts/consensus-protocol/negative-unl.md similarity index 100% rename from content/concepts/consensus-protocol/negative-unl.ja.md rename to content/@i18n/ja/concepts/consensus-protocol/negative-unl.md diff --git a/content/@i18n/ja/concepts/index.md b/content/@i18n/ja/concepts/index.md new file mode 100644 index 0000000000..c8311b9774 --- /dev/null +++ b/content/@i18n/ja/concepts/index.md @@ -0,0 +1,9 @@ +--- +html: concepts.html +parent: docs.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# コンセプト + +XRP Ledgerの基本的な部分の背景に「何があるか」、「なぜなのか」を学びましょう。 \ No newline at end of file diff --git a/content/concepts/ledgers/ledgers.ja.md b/content/@i18n/ja/concepts/ledgers/index.md similarity index 100% rename from content/concepts/ledgers/ledgers.ja.md rename to content/@i18n/ja/concepts/ledgers/index.md diff --git a/content/concepts/ledgers/ledger-close-times.ja.md b/content/@i18n/ja/concepts/ledgers/ledger-close-times.md similarity index 100% rename from content/concepts/ledgers/ledger-close-times.ja.md rename to content/@i18n/ja/concepts/ledgers/ledger-close-times.md diff --git a/content/concepts/ledgers/ledger-structure.ja.md b/content/@i18n/ja/concepts/ledgers/ledger-structure.md similarity index 100% rename from content/concepts/ledgers/ledger-structure.ja.md rename to content/@i18n/ja/concepts/ledgers/ledger-structure.md diff --git a/content/concepts/ledgers/open-closed-validated-ledgers.ja.md b/content/@i18n/ja/concepts/ledgers/open-closed-validated-ledgers.md similarity index 100% rename from content/concepts/ledgers/open-closed-validated-ledgers.ja.md rename to content/@i18n/ja/concepts/ledgers/open-closed-validated-ledgers.md diff --git a/content/concepts/networks-and-servers/amendments.ja.md b/content/@i18n/ja/concepts/networks-and-servers/amendments.md similarity index 93% rename from content/concepts/networks-and-servers/amendments.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/amendments.md index 0da02e4c09..c89e7b47e4 100644 --- a/content/concepts/networks-and-servers/amendments.ja.md +++ b/content/@i18n/ja/concepts/networks-and-servers/amendments.md @@ -63,6 +63,11 @@ AmendmentブロックはXRP Ledgerデータの正確性を守るためのセキ 最新バージョンの`rippled`にアップグレードすることで、Amendmentブロックされたサーバーのブロックを解除することができます。 +### AmendmentブロックされたClioサーバ + + +Clioサーバが台帳データのロード中に未知のフィールドに遭遇した場合、Amendmentブロックが発生することがあります。これは、Clioのビルド時に使用された`libxrpl`の依存ファイルにそれらのフィールドが存在しない場合に発生します。Amendmentブロックを解除するには、互換性のある`libxrpl`でビルドされた新しいClioリリースにアップグレードしてください。 + ## Amendmentの削除 Amendmentを有効にすると、修正前の動作のソースコードは`rippled`に残ります。検証のためにレジャーの結果を再構築するなど、古いコードを保持するユースケースはありますが、Amendmentとレガシーコードの追跡は時間の経過とともに複雑さを増していきます。 diff --git a/content/concepts/networks-and-servers/clustering.ja.md b/content/@i18n/ja/concepts/networks-and-servers/clustering.md similarity index 100% rename from content/concepts/networks-and-servers/clustering.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/clustering.md diff --git a/content/concepts/networks-and-servers/networks-and-servers.ja.md b/content/@i18n/ja/concepts/networks-and-servers/index.md similarity index 100% rename from content/concepts/networks-and-servers/networks-and-servers.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/index.md diff --git a/content/concepts/networks-and-servers/ledger-history/ledger-history.ja.md b/content/@i18n/ja/concepts/networks-and-servers/ledger-history.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/ledger-history.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/ledger-history.md diff --git a/content/@i18n/ja/concepts/networks-and-servers/parallel-networks.md b/content/@i18n/ja/concepts/networks-and-servers/parallel-networks.md new file mode 100644 index 0000000000..64b1c323e4 --- /dev/null +++ b/content/@i18n/ja/concepts/networks-and-servers/parallel-networks.md @@ -0,0 +1,54 @@ +--- +html: parallel-networks.html +parent: networks-and-servers.html +blurb: テストネットワークおよび代替レジャーチェーンと本番環境のXRP Ledgerとの関係について説明します。 +labels: + - ブロックチェーン +--- +# 並列ネットワーク + +XRP Ledgerにはピアツーピアの本番環境のネットワークが1つ存在し、XRP Ledger上で行われるすべての取引はその本番環境のネットワーク、すなわちMainnet内で発生します。 + +XRP Ledgerコミュニティのメンバーが、メインネットに影響を与えることなくXRP Ledgerとやり取りできるように、テストネットをはじめとするいくつかの代替ネットワークが用意されています。ここでは、いくつかのネットワークを紹介します。 + +| ネットワーク | アップグレード頻度 | 説明 | +|:-----------|:----------------|:---------------------------------------------| +| Mainnet | 安定版リリース | ピアツーピアサーバーのネットワーク機能を備えた分散型の暗号台帳であり、[XRP](what-is-xrp.html)の土台となる[XRP Ledger](xrp-ledger-overview.html)です。。 | +| Testnet | 安定版リリース | XRP Ledger上に構築したソフトウェアのテスト環境として動作する「代替環境」のネットワークです。。本番環境のXRP Ledgerユーザーに影響を及ぼすことも、本物の通貨をリスクにさらすこともありません。Testnetの[Amendmentのステータス](known-amendments.html)は、Mainnetを厳密に反映するようになっていますが、分散型システムが持つ予測不可能な性質により、タイミングにわずかな違いが生じることがあります。 | +| Devnet | ベータ版リリース | 次期リリースのプレビューネットワークです。XRP Ledgerのコアソフトウェアへの不安定な変更がテストされます。このAltNetを使用すると、開発者はまだMainnetで有効になっていないXRPLの計画段階の新機能やAmendmentを操作したり学習したりすることができます。 | +| [Hooks V3 Testnet](https://hooks-testnet-v3.xrpl-labs.com/) | [Hooksサーバ](https://github.com/XRPL-Labs/xrpld-hooks) | [Hooks](https://xrpl-hooks.readme.io/)を使用したオンチェーン・スマートコントラクト機能のプレビューネットワークです。 | + +テスト用XRPは、XRP Ledgerの実験やアプリケーションの開発、統合に興味のある人々に[無償で提供](xrp-testnet-faucet.html)されています。テスト用のXRPは実際には価値を持たず、ネットワークがリセットされると失われます。 + +**注意:** XRP Ledgerメインネットとは異なり、テストネットワークは通常「中央集権型」であり、これらのネットワークの安定性や可用性については保証されていません。これらのネットワークは、サーバ構成、ネットワークトポロジー、ネットワークパフォーマンスのさまざまな特性をテストする目的でこれまで使用され、またこれからも同様に使用されます。 + + +## 並列ネットワークとコンセンサス + +使用するネットワークを定義する`rippled`の設定はありません。その代わり、信頼するバリデータのコンセンサスに基づいてどのレジャーを正しいレジャーとして受け入れるかを把握します。`rippled`インスタンスからなる異なるコンセンサスグループが、同じグループの他のメンバーだけを信頼する場合、各グループは引き続き並列ネットワークとして機能します。悪意のあるコンピューターや不適切に動作するコンピューターが両方のネットワークに接続している場合でも、各ネットワークのメンバーが、定数設定を超えて別のネットワークのメンバーを信頼するように設定されていない限り、コンセンサスプロセスに混乱は生じません。 + +Ripple社は、TestnetとDevnetでメインサーバーを運用しています。[独自の`rippled`サーバーをTestnetに接続](connect-your-rippled-to-the-xrp-test-net.html)していただくことも可能です。TestnetとDevnetでは、多様で検閲耐性のあるバリデータのセットは使用されていません。そのため、Ripple社はTestnetやDevnetを定期的にリセットできます。 + + +## 関連項目 + +- **ツール:** + - [XRP Testnet Faucet](xrp-test-net-faucet.html) +- **コンセプト:** + - [コンセンサスについて](consensus.html) + - [Amendment](amendments.html) +- **チュートリアル:** + - [XRP Testnetへの`rippled`の接続](connect-your-rippled-to-the-xrp-test-net.html) + - [スタンドアロンモードでのrippledの使用](use-stand-alone-mode.html) +- **リファレンス:** + - [Server_infoメソッド][] + - [Consensus_infoメソッド][] + - [Validator_list_sitesメソッド][] + - [Validatorsメソッド][] + - [デーモンモードのオプション](commandline-usage.html#デーモンモードのオプション) + + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/networks-and-servers/peer-protocol.ja.md b/content/@i18n/ja/concepts/networks-and-servers/peer-protocol.md similarity index 100% rename from content/concepts/networks-and-servers/peer-protocol.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/peer-protocol.md diff --git a/content/concepts/networks-and-servers/rippled-server-modes.ja.md b/content/@i18n/ja/concepts/networks-and-servers/rippled-server-modes.md similarity index 100% rename from content/concepts/networks-and-servers/rippled-server-modes.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/rippled-server-modes.md diff --git a/content/concepts/networks-and-servers/the-clio-server.ja.md b/content/@i18n/ja/concepts/networks-and-servers/the-clio-server.md similarity index 100% rename from content/concepts/networks-and-servers/the-clio-server.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/the-clio-server.md diff --git a/content/concepts/networks-and-servers/transaction-censorship-detection.ja.md b/content/@i18n/ja/concepts/networks-and-servers/transaction-censorship-detection.md similarity index 100% rename from content/concepts/networks-and-servers/transaction-censorship-detection.ja.md rename to content/@i18n/ja/concepts/networks-and-servers/transaction-censorship-detection.md diff --git a/content/concepts/payment-types/checks.ja.md b/content/@i18n/ja/concepts/payment-types/checks.md similarity index 95% rename from content/concepts/payment-types/checks.ja.md rename to content/@i18n/ja/concepts/payment-types/checks.md index 7785c86374..d72e49757f 100644 --- a/content/concepts/payment-types/checks.ja.md +++ b/content/@i18n/ja/concepts/payment-types/checks.md @@ -17,7 +17,7 @@ XRP Ledger Checksには有効期限があり、この期限を過ぎると換金 Checksは[Escrow](escrow.html)と[Payment Channel](use-payment-channels.html)に似ていますが、Checksとこれらの機能の間には重要な相違がいくつかあります。 -* Checksでは発行済み通貨を送金できます。Payment ChannelとEscrowで送金できるのはXRPのみです。 +* Checksではトークンを送金できます。Payment ChannelとEscrowで送金できるのはXRPのみです。 * Checksは資金を凍結しません。Payment ChannelとEscrowでは、送金元が発行したクレームでXRPが清算されるか(Payment Channel)、または有効期限切れまたはCrypto-conditionsによってXRPがリリースされる(Escrow)までは、そのXRPを使用できません。 @@ -36,7 +36,7 @@ XRP Ledger Checksは、XRP Ledgerに固有の問題も解決できます。た ### ユースケース: 支払いの承認 -**課題:** [BSA、KYC、AML、CFT](stablecoin-issuer.html#コンプライアンス指針)などの規制に準拠するにあたり、金融機関は受領する資金の送金元に関する文書を提出する必要があります。違法な資金移動を防止するため、これらの規制は金融機関に対して、処理済のすべての支払いについて、その送金元と送金先を開示するよう義務付けています。XRP Ledgerの性質上、誰でもXRPを(および該当する場合には発行済み通貨を)XRP Ledger上の金融機関のアカウントに送金することができます。金融機関のコンプライアンス部門では、このような不審な支払いへの対応にかかるコスト(罰金の可能性を含む)の増大と処理の遅れが生じます。 +**課題:** [BSA、KYC、AML、CFT](stablecoin-issuer.html#コンプライアンス指針)などの規制に準拠するにあたり、金融機関は受領する資金の送金元に関する文書を提出する必要があります。違法な資金移動を防止するため、これらの規制は金融機関に対して、処理済のすべての支払いについて、その送金元と送金先を開示するよう義務付けています。XRP Ledgerの性質上、誰でもXRPを(および該当する場合にはトークンを)XRP Ledger上の金融機関のアカウントに送金することができます。金融機関のコンプライアンス部門では、このような不審な支払いへの対応にかかるコスト(罰金の可能性を含む)の増大と処理の遅れが生じます。 **解決策:** 金融機関は各自のXRP Ledgerのアカウントで、[`AccountSet`トランザクションの`asfDepositAuth`フラグを設定](accountset.html)することにより、[Deposit Authorization](depositauth.html)を有効にできます。これにより、アカウントはPaymentトランザクションを受領できなくなります。Deposit Authorizationが有効なアカウントは、Escrow、Payment Channel、またはChecksでのみ資金を受領できます。Deposit Authorizationが有効な場合、Checksが最もシンプルで使いやすく、柔軟な資金移動手段となります。 diff --git a/content/concepts/payment-types/cross-currency-payments.ja.md b/content/@i18n/ja/concepts/payment-types/cross-currency-payments.md similarity index 62% rename from content/concepts/payment-types/cross-currency-payments.ja.md rename to content/@i18n/ja/concepts/payment-types/cross-currency-payments.md index 5a30da5d21..e01506f1b4 100644 --- a/content/concepts/payment-types/cross-currency-payments.ja.md +++ b/content/@i18n/ja/concepts/payment-types/cross-currency-payments.md @@ -8,14 +8,14 @@ labels: --- # 複数通貨間の支払い -XRP Ledgerでは、1つ以上の発行済み通貨、XRP、またはその両方を交換して、複数通貨間で支払いを送金できます。[XRPによる直接支払](use-simple-xrp-payments.html)と同様に、このような支払いでは[Paymentトランザクションタイプ][Payment]が使用されます。XRP Ledgerでの複数通貨間の支払いは完全に非可分です。つまり、支払いを全額実行するか、またはまったく実行しないかのいずれかになります。 +XRP Ledgerでは、1つ以上のトークン、XRP、またはその両方を交換して、複数通貨間で支払いを送金できます。[XRPによる直接支払](use-simple-xrp-payments.html)と同様に、このような支払いでは[Paymentトランザクションタイプ][Payment]が使用されます。XRP Ledgerでの複数通貨間の支払いは完全に非可分です。つまり、支払いを全額実行するか、またはまったく実行しないかのいずれかになります。 デフォルトでは、複数通貨間の支払いでは宛先に一定額が送金され、支払元が変動コストを負担します。複数通貨間の支払いが、[Partial Payments](partial-payments.html)で行われ、一定の送金限度内の変動額が宛先に送金される場合もあります。 ## 前提条件 -- 定義上、複数通貨間支払いには2種類以上の通貨が関係します。つまり、関係する通貨のうち、少なくとも1種類以上がXRP以外の発行済み通貨である必要があります。 +- 定義上、複数通貨間支払いには2種類以上の通貨が関係します。つまり、関係する通貨のうち、少なくとも1種類以上がXRP以外のトークンである必要があります。 - 通常は、[XRP Ledgerゲートウェイ](stablecoin-issuer.html)が発行した通貨を1種類以上使用することになります。このような通貨はXRP Ledger外部の資金を担保とし、ゲートウェイを通じて引き出すことができます。 - 取引を行う当事者が、XRP Ledger内でのみ発行され、外部の担保がないデジタルトークンを送受信し、何らかの価値を持つ資産として取り扱うことを望む限り、このデジタルトークンを使用することもできます。 - 送金元と受取人の間に1つ以上の[パス](paths.html)が確立しており、すべてのパスの総流動性が、支払いを促進するのに十分である必要があります。複数通貨間の支払いの場合、これは一般に通貨取引[オファー](offers.html)を消費することを意味します。 @@ -23,7 +23,7 @@ XRP Ledgerでは、1つ以上の発行済み通貨、XRP、またはその両方 ## オートブリッジング -2種類の発行済み通貨を自動的に交換する複数通貨間の支払いでは、XRPの使用により支払いコストを抑えられる場合には自動的にXRPが使用されます。この場合、オーダーブックを接続して流動性プールが拡大されます。たとえば、USDからMXNに送金する支払いの場合、USDからXRP、XRPからMXNへの交換にかかるコストが、USDからMXNへの直接交換にかかるコストよりも低い場合には、前者の交換が自動的に実行されます。 +2種類のトークンを自動的に交換する複数通貨間の支払いでは、XRPの使用により支払いコストを抑えられる場合には自動的にXRPが使用されます。この場合、オーダーブックを接続して流動性プールが拡大されます。たとえば、USDからMXNに送金する支払いの場合、USDからXRP、XRPからMXNへの交換にかかるコストが、USDからMXNへの直接交換にかかるコストよりも低い場合には、前者の交換が自動的に実行されます。 詳細は、[オートブリッジング](autobridging.html)を参照してください。 diff --git a/content/concepts/payment-types/direct-xrp-payments.ja.md b/content/@i18n/ja/concepts/payment-types/direct-xrp-payments.md similarity index 91% rename from content/concepts/payment-types/direct-xrp-payments.ja.md rename to content/@i18n/ja/concepts/payment-types/direct-xrp-payments.md index a9f2d826a6..4cf677fa56 100644 --- a/content/concepts/payment-types/direct-xrp-payments.ja.md +++ b/content/@i18n/ja/concepts/payment-types/direct-xrp-payments.md @@ -57,7 +57,7 @@ XRP Ledgerでは、支払いを受け取ることができるアドレスは永 2. 受取アドレスが、資金供給されたアカウントかどうかを確認します。 - - 受取アドレスに資金が供給されている場合は、[DepositAuth](depositauth.html)や[RequireDest](source-and-destination-tags.html#requiring-tags)など、支払いの受け取りに関する制限が受取アドレスにあるかどうかを確認します。そのような制限を支払いが満たしていない場合、支払いは失敗します。 + - 受取アドレスに資金が供給されている場合は、[DepositAuth](depositauth.html)や[RequireDest](source-and-destination-tags.html#タグの必須化)など、支払いの受け取りに関する制限が受取アドレスにあるかどうかを確認します。そのような制限を支払いが満たしていない場合、支払いは失敗します。 - 受取アドレスに資金が供給されていない場合は、[必要準備金](reserves.html)の最低額を満たすのに十分なXRPが支払いで送金されるかどうかを確認します。十分でない場合、支払いは失敗します。 3. `Amount`フィールドで指定されたXRPの金額と、[トランザクションコスト](transaction-cost.html)用に消却されるXRPの金額の合計を送金元アカウントから引き落とし、受取アカウントに同じ金額を送金します。 @@ -70,8 +70,8 @@ XRP Ledgerでは、支払いを受け取ることができるアドレスは永 ## 他の支払いタイプとの比較 - **XRPによる直接支払**は、単一のトランザクションでXRPを送受信する唯一の方法です。この方法は、速度、シンプルさ、低コストの面でバランスが取れています。 -- [通貨間の支払い](cross-currency-payments.html)でも[Payment][]トランザクションタイプを使用しますが、XRPとXRP以外の[発行済み通貨](issued-currencies.html)を組み合わせて送金できます。ただし、XRP間の支払いは除きます。また、[Partial Payment](partial-payments.html)でも使用できます。通貨間の支払いは、XRPで指定されていない支払いや、[分散型取引所](decentralized-exchange.html)で裁定取引の機会を得るのに適しています。 -- [Checks](checks.html)すぐに送金せずに送金元に債務を設定してもらいます。受取人は有効期間内であればいつでも換金できますが、その金額は保証されません。Checksでは、XRPまたは発行済み通貨のいずれかを送金できます。Checksは、受取人に支払いを請求する自律性を与えるのに適しています。 +- [通貨間の支払い](cross-currency-payments.html)でも[Payment][]トランザクションタイプを使用しますが、XRPとXRP以外の[トークン](tokens.html)を組み合わせて送金できます。ただし、XRP間の支払いは除きます。また、[Partial Payment](partial-payments.html)でも使用できます。通貨間の支払いは、XRPで指定されていない支払いや、[分散型取引所](decentralized-exchange.html)で裁定取引の機会を得るのに適しています。 +- [Checks](checks.html)すぐに送金せずに送金元に債務を設定してもらいます。受取人は有効期間内であればいつでも換金できますが、その金額は保証されません。Checksでは、XRPまたはトークンのいずれかを送金できます。Checksは、受取人に支払いを請求する自律性を与えるのに適しています。 - [Escrow](escrow.html)では、特定の条件が満たされたときに、意図した受取人が要求できるXRPを確保します。XRPの金額は完全に保証されており、Escrowの有効期限が切れない限り、送金元が使用することはできません。Escrowは、巨額のスマートコントラクトに適しています。 - [Payment Channel](payment-channels.html)では、XRPが確保されます。受取人は、署名による認証を使用して、チャネルから一括でXRPを要求できます。XRP Ledgerの全トランザクションを送信せずに、認証を個々に確認できます。Payment Channelは、極めて大量の小口決済または「ストリーミング」支払いに適しています。 diff --git a/content/@i18n/ja/concepts/payment-types/escrow.md b/content/@i18n/ja/concepts/payment-types/escrow.md new file mode 100644 index 0000000000..b0abfccaba --- /dev/null +++ b/content/@i18n/ja/concepts/payment-types/escrow.md @@ -0,0 +1,98 @@ +--- +html: escrow.html +parent: payment-types.html +blurb: XRPはEscrowに預託され、後日特定の条件が満たされた時点で送金されます。Escrowは時間制限、暗号条件、あるいはその両方によって異なる場合があります。 +labels: + - Escrow +--- +# Escrow + +従来より、Escrowとは、金融取引を円滑に行うための二者間の契約です。公平な第三者が資金を受領・保管し、契約で指定された条件が満たされた場合にのみ、目的の受取人に資金を提供します。この方法により、両当事者は確実に義務を果たすことができます。 + +XRP LedgerはEscrowをさらに一歩進め、サードパーティをレジャーに組み込まれた自動システムに置き換えます。EscrowはXRPをロックし、条件が満たされるまで使用も破棄もできません。 + +## Escrowの種類 + +XRP Ledgerは3つの種類のEscrowをサポートします。 + +- **時間ベースのEscrow:** 一定の時間が経過した後資金が利用可能になります。 +- **条件付きEscrow:** このEscrowは、対応する条件(condition)と履行(フルフィルメント)を設定して作成されます。条件は資金をロックする役割を果たし、正しい履行キーが提供されるまで解除されません。 +- **複合Escrow:** このEscrowは、時間ベースEscrowと条件付きEscrowの特徴を兼ね備えています。このEscrowは、指定された時間が経過するまでは全くアクセスすることができず、その後、正しい履行を行うことで資金を解放することができます。 + +## Escrowのライフサイクル + +1. 送信者は`EscrowCreate`トランザクションを用いてEscrowを作成します。このトランザクションは以下を指定します。 + + - ロックするXRPの量 + - XRPをリリースする条件 + - XRPの受取人 + +2. トランザクションが処理されると、XRP LedgerはEscrowされたXRPを保持する`Escrow`オブジェクトを作成します。 + +3. 受取人はXRPを受け渡すために`EscrowFinish`トランザクションを送信します。条件が満たされた場合、`Escrow`オブジェクトは破棄され、XRPは受取人に引き渡されます。 + + **注記:** Escrowに有効期限があり、それまでに正常に終了しなかった場合、Escrowは期限切れになります。期限切れのEscrowは`EscrowCancel`トランザクションがそれをキャンセルするまで台帳に残り、`Escrow`オブジェクトを破棄してXRPを送信者に返します。 + +## 状態遷移図 + +次の図は、Escrow実施時の各状態を示します。 + +[![Escrowの状態がHeld → Ready/Conditionally Ready → Expiredと遷移する様子を示す状態遷移図](img/escrow-states.ja.png)](img/escrow-states.ja.png) + +この図は、Escrowの「Finish-after」時刻(`FinishAfter`フィールド)、Crypto-condition(`Condition`フィールド)、および有効期限(`CancelAfter`フィールド)の3通りの組み合わせの3つの例を示します。 + +- **時間ベースのEscrow(左):** Finish-after時刻のみが設定されているEscrowは、**Held**状態で作成されます。指定の時刻が経過すると**Ready**になり、誰でもこのEscrowを終了できるようになります。Escrowに有効期限が設定されており、その時刻になるまでに誰もEscrowを終了しないと、そのEscrowは**Expired**になります。Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。Escrowに`CancelAfter`フィールドが設定されていない場合、Escrowが期限切れになることがないため、キャンセルできません。 + +- **複合Escrow(中央):** EscrowでCrypto-condition(`Condition`フィールド) _および_ 「Finish-after」時刻(`FinishAfter`フィールド)の両方が指定されている場合、Finish-after時刻が経過するまでEscrowは**Held**状態です。その後**Conditionally Ready**になり、Crypto-conditionに対し正しいフルフィルメントを提供すればEscrowを終了できます。Escrowに有効期限(`CancelAfter`フィールド)が設定されており、その時刻になるまでに誰もEscrowを終了しないと、そのEscrowは**Expired**になります。Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。Escrowに`CancelAfter`フィールドが設定されていない場合、Escrowが期限切れになることがないため、キャンセルできません。 + +- **条件付きEscrow(右):** EscrowでCrypto-condition(`Condition`フィールド)が指定されており、Finish-after時刻が指定されていない場合、Escrowは作成時点で即時に**Conditionally Ready**になります。この時点では、Crypto-conditionに対する正しいフルフィルメントを提供した人だけがEscrowを終了できます。有効期限(`CancelAfter`フィールド)までに終了されなかったEscrowは**Expired**になります。(Finish-after時刻が設定されていないEscrowには、有効期限が設定されている _必要があります_ 。)Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。 + + +## 制約事項 + +- EscrowはXRPでのみ実行でき、発行済み通貨では実行できません。 +- 少額での利用はコスト面で難しいかもしれません。 + - Crypto-conditionを使用する場合、[EscrowFinishトランザクションのコスト](#escrowfinishトランザクションのコスト)が通常よりも高くなります。 + - エスクローが未成立な間は、`Escrow`オブジェクトの[準備金](reserves.html)は送信者の責任となります。 +- Escrowを作成するトランザクションの実行時には、時刻の値が過去の時間であってはなりません。 +- 時限リリースおよび有効期限は、レジャークローズに制約されます。つまり実際には、レジャーの正確なクローズ時刻に基づいて、これらの時刻が約5秒単位で丸められる場合があります。 +- サポートされている唯一の[Crypto-condition][]タイプはPREIMAGE-SHA-256です。 + + +## EscrowFinishトランザクションのコスト + +Crypto-conditionを使用する場合、Crypto-conditionフルフィルメントの検証に高い処理負荷がかかるため、EscrowFinishトランザクションでは[高額なトランザクションコスト](transaction-cost.html#特別なトランザクションコスト)を支払う必要があります。 + +追加で必要となる取引コストはフルフィルメントのサイズに比例します。トランザクションが[マルチシグ](multi-signing.html)の場合、マルチサインのコストはフルフィルメントのコストに追加されます。 + +必要となる追加のトランザクションコストは、フルフィルメントのサイズに比例します。現時点では、フルフィルメントのあるEscrowFinishでは最小トランザクションコストとして、**330 drop([XRPのdrop数](basic-data-types.html#通貨額の指定))と、フルフィルメントのサイズで16バイトあたり10 drop**が必要です。 + +**注記:** 上記の式は、トランザクションのリファレンスコストが10 dropであることを前提としています。 + +[手数料投票](fee-voting.html)により`reference_fee`の値が変更される場合、この式は新しいリファレンスコストに基づいてスケーリングされます。フルフィルメントのあるEscrowFinishトランザクションの公式は次のとおりです。 + +``` +reference_fee * (signer_count + 33 + (fulfillment_bytes / 16)) +``` + + + +## 参考情報 + +XRP LedgerのEscrowの詳細は、以下を参照してください: + +- [Escrowチュートリアル](use-escrows.html) +- [トランザクションのリファレンス](transaction-formats.html) + - [EscrowCreateトランザクション][] + - [EscrowFinishトランザクション][] + - [EscrowCancelトランザクション][] +- [レジャーリファレンス](ledger-data-formats.html) + - [Escrowオブジェクト](escrow-object.html) + + +Rippleによる550億XRPのロックアップについては、[Ripple's Insights Blog](https://ripple.com/insights/ripple-to-place-55-billion-xrp-in-escrow-to-ensure-certainty-into-total-xrp-supply/)を参照してください。 + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/@i18n/ja/concepts/payment-types/index.md b/content/@i18n/ja/concepts/payment-types/index.md new file mode 100644 index 0000000000..4350bbf274 --- /dev/null +++ b/content/@i18n/ja/concepts/payment-types/index.md @@ -0,0 +1,9 @@ +--- +html: payment-types.html +parent: concepts.html +template: pagetype-category.html.jinja +blurb: XRP LedgerはポイントツーポイントのXRPペイメントのほかに、より専門的な支払いタイプをサポートしています。 +--- +# 支払いのタイプ + +XRP LedgerはポイントツーポイントのXRPペイメントのほかに、より専門的な支払いタイプをサポートしています。 \ No newline at end of file diff --git a/content/concepts/payment-types/partial-payments.ja.md b/content/@i18n/ja/concepts/payment-types/partial-payments.md similarity index 96% rename from content/concepts/payment-types/partial-payments.ja.md rename to content/@i18n/ja/concepts/payment-types/partial-payments.md index 1a29280474..770fa4f45a 100644 --- a/content/concepts/payment-types/partial-payments.ja.md +++ b/content/@i18n/ja/concepts/payment-types/partial-payments.md @@ -52,14 +52,14 @@ Partial Paymentには次の制限事項があります。 Partial Paymentでの実際の送金額を把握できるように、正常に完了したPaymentトランザクションのメタデータには`delivered_amount`フィールドが含まれています。このフィールドには送金額が`Amount`フィールドと[同じフォーマット](basic-data-types.html#通貨額の指定)で示されています。 -Partial Payment以外の場合、トランザクションのメタデータの`delivered_amount`フィールドは、トランザクションの`Amount`フィールドと同じです。支払が発行済み通貨で行われた場合、丸め方により`delivered_amount`が`Amount`フィールドとやや異なることがあります。 +Partial Payment以外の場合、トランザクションのメタデータの`delivered_amount`フィールドは、トランザクションの`Amount`フィールドと同じです。支払がトークンで行われた場合、丸め方により`delivered_amount`が`Amount`フィールドとやや異なることがあります。 次の**両方**の条件に該当するトランザクションでは、送金額を**使用できません**。 - Partial Paymentである - 2014-01-20以前の検証済みレジャーに含まれている -この両方の条件に該当する場合、`delivered_amount`には実際の金額ではなく文字列値`unavailable`が示されます。この状況で実際の送金額を確認する唯一の方法は、トランザクションのメタデータでAffectedNodesを参照することです。発行済み通貨を送金するトランザクションで、`Amount`の`issuer`が`Destination`アドレスと同じアカウントである場合、送金額は異なる取引相手へのトラストラインを表す複数の`AffectedNodes`メンバー間で分割できます。 +この両方の条件に該当する場合、`delivered_amount`には実際の金額ではなく文字列値`unavailable`が示されます。この状況で実際の送金額を確認する唯一の方法は、トランザクションのメタデータでAffectedNodesを参照することです。トークンを送金するトランザクションで、`Amount`の`issuer`が`Destination`アドレスと同じアカウントである場合、送金額は異なる取引相手へのトラストラインを表す複数の`AffectedNodes`メンバー間で分割できます。 `delivered_amount`フィールドは以下のフィールドに含まれています。 diff --git a/content/concepts/payment-types/payment-channels.ja.md b/content/@i18n/ja/concepts/payment-types/payment-channels.md similarity index 100% rename from content/concepts/payment-types/payment-channels.ja.md rename to content/@i18n/ja/concepts/payment-types/payment-channels.md diff --git a/content/concepts/tokens/authorized-trust-lines.ja.md b/content/@i18n/ja/concepts/tokens/authorized-trust-lines.md similarity index 100% rename from content/concepts/tokens/authorized-trust-lines.ja.md rename to content/@i18n/ja/concepts/tokens/authorized-trust-lines.md diff --git a/content/concepts/tokens/autobridging.ja.md b/content/@i18n/ja/concepts/tokens/autobridging.md similarity index 100% rename from content/concepts/tokens/autobridging.ja.md rename to content/@i18n/ja/concepts/tokens/autobridging.md diff --git a/content/concepts/tokens/automated-market-makers.ja.md b/content/@i18n/ja/concepts/tokens/automated-market-makers.md similarity index 79% rename from content/concepts/tokens/automated-market-makers.ja.md rename to content/@i18n/ja/concepts/tokens/automated-market-makers.md index 6f394258eb..88eb82c893 100644 --- a/content/concepts/tokens/automated-market-makers.ja.md +++ b/content/@i18n/ja/concepts/tokens/automated-market-makers.md @@ -10,7 +10,7 @@ labels: --- # 自動マーケットメーカー -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ 自動マーケットメーカー(AMM)は、XRP Ledgerの分散型取引所において流動性を提供するスマートコントラクトです。個々のAMMは2つの資産のプールを保有し、数式で定められた取引レートでユーザーがその2つの資産間でスワップを可能とします。 @@ -34,6 +34,15 @@ AMMは、プール内の資産残高に基づき取引レートを設定しま XRP Ledgerの実装は、重みパラメータを0.5とした _幾何平均_ AMMですので、_定積_ マーケットメーカーのように機能します。 _定積_ AMMの公式や一般的なAMMの経済学についての詳しい説明は、[Kris Machowski's Introduction to Automated Market Makers](https://www.machow.ski/posts/an_introduction_to_automated_market_makers/)をご覧ください。 +### 資産の制限 + + +To prevent misuse, some restrictions apply to the assets used in an AMM. If you try to create an AMM with an asset that does not meet these restrictions, the transaction fails. The rules are as follows: + +- The asset must not be an LP Token from another AMM. +- If the asset is a token whose issuer uses [Authorized Trust Lines](authorized-trust-lines.html), the creator of the AMM must be authorized to hold those tokens. Only users whose trust lines are authorized can deposit that token into the AMM or withdraw it; however, users can still deposit or withdraw the other asset. +- If the [Clawback amendment][] :not_enabled: is enabled, the issuer of the token must not have enabled the ability to claw back their tokens. + ## LPトークン AMMの作成者は、最初の流動性供給者となり、AMMのプール内の資産の100%の所有権を表すLPトークンを受け取ります。LPトークンの一部または全部を交換して、現在のプール残高に比例した資産をAMMから引き出せます。(この比率は、人々がAMMに対して取引を行うにつれて変化します)AMMは、同時に両方の資産を引き出す際に手数料はかかりません。 @@ -50,6 +59,7 @@ AMMは、発行済のLPトークンがない場合に限り、AMMの資産プー LPトークンは、160ビットの16進法["非標準"フォーマット](currency-formats.html#非標準通貨コード)の特別なタイプの通貨コードを使用します。これらのコードの最初の8ビットは`0x03`です。残りのコードは、2つの資産の通貨コードとその発行者のSHA-512ハッシュで、最初の152ビットまで切り捨てたものです。(資産は、数値の低い通貨と発行者のペアを最初にする「正規化された順序」で配置されます。)その結果、LPトークンは、通貨と発行者のペアを最初にする「正規化された順序」で配置されます。その結果、ある資産ペアのAMMのLPトークンは、予測可能で一貫した通貨コードを持っています。 + ## 取引手数料 取引手数料は流動性供給者の収益源であり、プールの資産に対して他者に取引をさせることによる為替リスクを相殺するものです。取引手数料は流動性提供者に直接支払われずにAMMに支払われますが、流動性供給者は自分のLPトークンをAMMのプールの一定割合と交換することができるため、利益を得ることができます。 @@ -64,21 +74,37 @@ LPトークンは、160ビットの16進法["非標準"フォーマット](curre どのようなAMMであっても、その資産の価格が外部市場で大きく変動すると、トレーダーは裁定取引によってAMMから利益を得ることができ、その結果、流動性供給者は損失を被ることになります。オークションの仕組みは、より多くの価値を流動性供給者に還元し、AMMの価格をより迅速に外部市場とのバランスに戻すことを意図しています。 + ## 台帳上の表示 -台帳の状態データでは、AMMは複数の[レジャーオブジェクトのタイプ](ledger-object-types.html)で構成されています。 +台帳の状態データでは、AMMは複数の[レジャーエントリのタイプ](ledger-object-types.html)で構成されています。 -- 自動マーケットメーカー自体を記述した[AMMオブジェクト][] +- 自動マーケットメーカー自体を記述した[AMMエントリ][] -- AMMのLPトークンを発行し、AMMのXRP(保有している場合)を保有する特別な[AccountRootオブジェクト][] +- AMMのLPトークンを発行し、AMMのXRP(保有している場合)を保有する特別な[AccountRootエントリ][] このAccountRootのアドレスは、AMMの作成時にランダムに選ばれ、AMMを削除して再作成した場合にも異なるアドレスが選ばれます。これは、AMMのアカウントにユーザーが事前にXRPで資金を供給することを防止するためです。 - AMMのプールにあるトークンのAMM専用アカウントへの[トラストライン](trust-lines-and-issuing.html) -これらのオブジェクトはどのアカウントにも所有されていないため、[準備金要件](reserves.html)は適用されません。ただし、スパムを防ぐため、AMMを作成するための取引には特別な[トランザクションコスト](transaction-cost.html)があり、通常よりも多くのXRPを消費する必要があります。 +これらのレジャーエントリはどのアカウントにも所有されていないため、[準備金要件](reserves.html)は適用されません。ただし、スパムを防ぐため、AMMを作成するための取引には特別な[トランザクションコスト](transaction-cost.html)があり、通常よりも多くのXRPを消費する必要があります。 +## 削除 + +AMMは、[AMMWithdrawトランザクション][]がそのプールから全てのアセットを引き出すと削除されます。これは、AMMのすべての発行済みLPトークンを償還することによってのみ発生します。AMMの削除には、以下のようなAMMに関連するすべてのレジャーエントリの削除も含まれます。 + +- AMM +- AccountRoot +- AMMのLPトークンのトラストライン。これらのトラストラインは残高が0ですが、限度額など他の詳細がデフォルト以外の値に設定されている可能性があります。 +- AMMのプールに存在するトークンのトラストライン。 + +AMMアカウントが削除されるときに、512を超えるトラストラインが設定されていた場合、出金は成功し、可能な限り多くのトラストラインを削除します。 + +AMMのプールに資産がない間は、誰でも[AMMDeleteトランザクション][]を送信してAMMを削除することができます。別の方法として、誰でも[特別な入金](ammdeposit.html#空のammの場合の特殊なケース)を行うことで、AMMにあたかも新規であるかのように入金することができます。資産プールが空のAMMに対しては、他の操作は無効です。 + +空のAMMを削除することによる払い戻しやインセンティブはありません。 + {% include '_snippets/rippled-api-links.md' %} {% include '_snippets/tx-type-links.md' %} diff --git a/content/@i18n/ja/concepts/tokens/clawing-back-tokens.md b/content/@i18n/ja/concepts/tokens/clawing-back-tokens.md new file mode 100644 index 0000000000..1a7754746d --- /dev/null +++ b/content/@i18n/ja/concepts/tokens/clawing-back-tokens.md @@ -0,0 +1,42 @@ +--- +html: clawing-back-tokens.html +parent: tokens.html +blurb: 発行者は、トークンを発行する前にClawback機能を有効にすると、規制遵守の目的でトークンを取り戻すことができます。 +labels: + - トークン +--- +# トークンの回収 + +{% include '_snippets/clawback-disclaimer.ja.md' %} + +規制上の目的から、トークンがアカウントに送信された後にトークンを回収する機能を必要とする発行者が存在します。例えば、トークンが違法行為で制裁を受けたアカウントに送られたことが発覚した場合、発行者はその資金を「回収」することができます。 + +発行者は、発行アカウントで**Allow Clawback**フラグを有効にすることで、トークンを回収する権限を得ることができます。発行者がすでにトークンを発行している場合、このフラグを有効にすることはできません。 + +**注記:** アカウント自身が発行したトークンのみを回収することができます。この方法でXRPを回収することはできません。 + +Clawback機能はデフォルトで無効になっています。使用するには、[AccountSetトランザクション][]を送信して、**Allow Trust Line Clawback**設定を有効にする必要があります。**既存のトークンを持つ発行者はClawback機能を有効にすることはできません**。**Allow Trust Line Clawback**を有効にできるのは、所有者ディレクトリが完全に空の場合のみです。つまり、トラストライン、オファー、エスクロー、ペイメントチャネル、チェック、または署名者リストを設定する前に有効にする必要があります。 + +`lsfNoFreeze`が設定されているときに`lsfAllowTrustLineClawback`を設定しようとすると、トランザクションは`tecNO_PERMISSION`を返します。 +逆に、`lsfAllowTrustLineClawback`が設定されている時に`lsfNoFreeze`を設定しようとすると、トランザクションは`tecNO_PERMISSION`を返します。 + +## Clawbackトランザクションの例 + +```json +{ + "TransactionType": "Clawback", + "Account": "rp6abvbTbjoce8ZDJkT6snvxTZSYMBCC9S", + "Amount": { + "currency": "FOO", + "issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "value": "314.159" + } +} +``` + +このトランザクションが成功した場合、rp6abvbTbjoce8ZDJkT6snvxTZSYMBCC9Sが発行し、rsA2LpzuawewSBQXkiju3YQTMzW13pAAdWが保有する最大314.159FOOを回収することになります。 + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/tokens/common-misconceptions-about-freezes.ja.md b/content/@i18n/ja/concepts/tokens/common-misconceptions-about-freezes.md similarity index 100% rename from content/concepts/tokens/common-misconceptions-about-freezes.ja.md rename to content/@i18n/ja/concepts/tokens/common-misconceptions-about-freezes.md diff --git a/content/concepts/tokens/decentralized-exchange.ja.md b/content/@i18n/ja/concepts/tokens/decentralized-exchange.md similarity index 100% rename from content/concepts/tokens/decentralized-exchange.ja.md rename to content/@i18n/ja/concepts/tokens/decentralized-exchange.md diff --git a/content/concepts/tokens/demurrage.ja.md b/content/@i18n/ja/concepts/tokens/demurrage.md similarity index 98% rename from content/concepts/tokens/demurrage.ja.md rename to content/@i18n/ja/concepts/tokens/demurrage.md index d519514bef..3e1155c3ae 100644 --- a/content/concepts/tokens/demurrage.ja.md +++ b/content/@i18n/ja/concepts/tokens/demurrage.md @@ -41,7 +41,7 @@ D = A × ( e ^ (t ÷ τ) ) 2. 変換する量に適用します。 - レジャー値を表示値に変換する場合は、デマレージ係数を乗じる。 - 表示値をレジャー値に変換する場合は、デマレージ係数で割ってください。 -3. 必要であれば、結果値が望ましい精度で表現できるように調整する。XRP Ledgerの[発行通貨形式](currency-formats.html#発行済み通貨の精度)により、レジャー値の精度は小数点以下15桁までとされています。 +3. 必要であれば、結果値が望ましい精度で表現できるように調整する。XRP Ledgerの[発行通貨形式](currency-formats.html#トークンの精度)により、レジャー値の精度は小数点以下15桁までとされています。 ## 利子付き通貨コードフォーマット diff --git a/content/concepts/tokens/freezes.ja.md b/content/@i18n/ja/concepts/tokens/freezes.md similarity index 78% rename from content/concepts/tokens/freezes.ja.md rename to content/@i18n/ja/concepts/tokens/freezes.md index 6cb0cecc05..4e63bd676d 100644 --- a/content/concepts/tokens/freezes.ja.md +++ b/content/@i18n/ja/concepts/tokens/freezes.md @@ -1,17 +1,17 @@ --- html: freezes.html parent: tokens.html -blurb: 凍結では、コンプライアンス目的で発行済み通貨の取引を停止できます。 +blurb: 発行者はコンプライアンス目的でトークンの取引を停止できます。 labels: - トークン --- -# 発行済み通貨の凍結 +# トークンの凍結 -XRPは発行済み通貨ではありません。XRPはXRP Ledgerのネイティブ資産であり、XRP Ledgerでのトランザクションの実行に必要となります。XRPは取引相手を必要としません。つまり、XRPを保有しているということは負債ではなく実際の通貨であるXRPを保有していることになります。このため、_**いかなる組織または個人もXRPを凍結できません**_。 +XRPはトークンではありません。XRPはXRP Ledgerのネイティブ資産であり、XRP Ledgerでのトランザクションの実行に必要となります。XRPは取引相手を必要としません。つまり、XRPを保有しているということは負債ではなく実際の通貨であるXRPを保有していることになります。このため、_**いかなる組織または個人もXRPを凍結できません**_。 -XRP Ledgerでは、XRP以外の通貨はすべて発行済み通貨として表すことができます。このような発行済み通貨(「イシュアンス」または「IOU」とも呼ばれます)は、「トラストライン」と呼ばれるアドレス間の会計上の関係で管理されます。発行済み通貨は通常、負債とも資産とも見なされるため、トラストラインの残高は、見る視点によってマイナスにもプラスにもなります。どのアドレスも(XRP以外の)通貨を自由に発行できますが、他のアドレスが希望する保有量によってのみ制限されます。 +XRP Ledgerでは、XRP以外の通貨はすべてトークンとして表すことができます。このようなトークン(「イシュアンス」または「IOU」とも呼ばれます)は、「トラストライン」と呼ばれるアドレス間の会計上の関係で管理されます。トークンは通常、負債とも資産とも見なされるため、トラストラインの残高は、見る視点によってマイナスにもプラスにもなります。どのアドレスも(XRP以外の)通貨を自由に発行できますが、他のアドレスが希望する保有量によってのみ制限されます。 -特定のケースでは、法的要件への準拠や、疑わしい活動の調査のために、取引所またはゲートウェイが、XRP以外の発行済み通貨の残高を急きょ凍結することがあります。 +特定のケースでは、法的要件への準拠や、疑わしい活動の調査のために、取引所またはゲートウェイが、XRP以外のトークンの残高を急きょ凍結することがあります。 **ヒント:** 誰もXRPを凍結することはできません。 @@ -21,7 +21,7 @@ XRP Ledgerでは、XRP以外の通貨はすべて発行済み通貨として表 * [**Global Freeze**](#global-freeze) - 取引相手全員を凍結します。 * [**No Freeze**](#no-freeze) - 個々の取引相手の凍結機能と、Global Freezeを終了できる機能を永久に放棄します。 -凍結機能は発行済み通貨にのみ適用されます。XRP Ledgerには特権的な立場の当事者は存在しないため、凍結機能では、取引相手が、XRPまたはその他の取引相手が発行した資金で取引を実行することを阻止できません。Rippleを含め誰もXRPを凍結することはできません。 +凍結機能はトークンにのみ適用されます。XRP Ledgerには特権的な立場の当事者は存在しないため、凍結機能では、取引相手が、XRPまたはその他の取引相手が発行した資金で取引を実行することを阻止できません。Rippleを含め誰もXRPを凍結することはできません。 凍結対象の残高がプラス、マイナスにかかわらず、すべての凍結設定を行うことができます。通貨イシュアーまたは通貨保持者のいずれかがトラストラインを凍結できますが、通貨保持者がイシュアーを凍結しても、その影響はわずかです。 @@ -33,7 +33,7 @@ XRP Ledgerでは、XRP以外の通貨はすべて発行済み通貨として表 * 凍結されたトラストラインの両当事者間の直接決済は、凍結後も可能です。 * そのトラストラインの取引相手は、イシュアーへ直接支払う場合を除き、凍結されたトラストラインの残高を減らすことはできません。取引相手は、凍結されたイシュアンスを直接イシュアーに送信することだけが可能です。 * 取引相手は、凍結されたトラストライン上で引き続きその他の当事者からの支払を受け取ることができます。 -* 取引相手が凍結されたトラストライン上の発行済み通貨の売りオファーを出した場合、[資金不足とみなされます](offers.html#オファーのライフサイクル)。 +* 取引相手が凍結されたトラストライン上のトークンの売りオファーを出した場合、[資金不足とみなされます](offers.html#オファーのライフサイクル)。 確認事項: トラストラインではXRPは保持されません。XRPは凍結できません。 @@ -48,11 +48,11 @@ Individual Freezeは1つの通貨にのみ適用されます。特定の取引 ## Global Freeze -**Global Freeze**機能は、アドレスに設定できます。発行アドレスがGlobal Freeze機能を有効にすると、その発行アドレスのすべての発行済み通貨に対して以下のルールが適用されます: +**Global Freeze**機能は、アドレスに設定できます。発行アドレスがGlobal Freeze機能を有効にすると、その発行アドレスのすべてのトークンに対して以下のルールが適用されます: * 凍結された発行アドレスのすべての取引相手は、イシュアーに直接支払う場合を除き、凍結されたアドレスへのトラストラインの残高を減らすことができません。(これはすべての[運用アドレス](account-types.html)にも影響します。) * 凍結された発行アドレスの取引相手は、発行アドレスとの直接的な支払の送受信を引き続き行うことができます。 -* 凍結アドレスによる発行済み通貨の売りオファーはすべて、[資金不足とみなされます](offers.html#オファーのライフサイクル)。 +* 凍結アドレスによるトークンの売りオファーはすべて、[資金不足とみなされます](offers.html#オファーのライフサイクル)。 確認事項: アドレスはXRPを発行できません。Global FreezeはXRPには適用されません。 diff --git a/content/concepts/tokens/nft-collections.ja.md b/content/@i18n/ja/concepts/tokens/nft-collections.md similarity index 100% rename from content/concepts/tokens/nft-collections.ja.md rename to content/@i18n/ja/concepts/tokens/nft-collections.md diff --git a/content/concepts/tokens/nft-fixed-supply.ja.md b/content/@i18n/ja/concepts/tokens/nft-fixed-supply.md similarity index 100% rename from content/concepts/tokens/nft-fixed-supply.ja.md rename to content/@i18n/ja/concepts/tokens/nft-fixed-supply.md diff --git a/content/concepts/tokens/nft-reserve-requirements.ja.md b/content/@i18n/ja/concepts/tokens/nft-reserve-requirements.md similarity index 100% rename from content/concepts/tokens/nft-reserve-requirements.ja.md rename to content/@i18n/ja/concepts/tokens/nft-reserve-requirements.md diff --git a/content/concepts/tokens/nftoken-auctions.ja.md b/content/@i18n/ja/concepts/tokens/nftoken-auctions.md similarity index 100% rename from content/concepts/tokens/nftoken-auctions.ja.md rename to content/@i18n/ja/concepts/tokens/nftoken-auctions.md diff --git a/content/concepts/tokens/nftoken-authorized-minting.ja.md b/content/@i18n/ja/concepts/tokens/nftoken-authorized-minting.md similarity index 100% rename from content/concepts/tokens/nftoken-authorized-minting.ja.md rename to content/@i18n/ja/concepts/tokens/nftoken-authorized-minting.md diff --git a/content/concepts/tokens/nftoken-batch-minting.ja.md b/content/@i18n/ja/concepts/tokens/nftoken-batch-minting.md similarity index 100% rename from content/concepts/tokens/nftoken-batch-minting.ja.md rename to content/@i18n/ja/concepts/tokens/nftoken-batch-minting.md diff --git a/content/concepts/tokens/non-fungible-token-transfers.ja.md b/content/@i18n/ja/concepts/tokens/non-fungible-token-transfers.md similarity index 100% rename from content/concepts/tokens/non-fungible-token-transfers.ja.md rename to content/@i18n/ja/concepts/tokens/non-fungible-token-transfers.md diff --git a/content/concepts/tokens/non-fungible-tokens.ja.md b/content/@i18n/ja/concepts/tokens/non-fungible-tokens.md similarity index 92% rename from content/concepts/tokens/non-fungible-tokens.ja.md rename to content/@i18n/ja/concepts/tokens/non-fungible-tokens.md index 212f84859a..e2a4bfce85 100644 --- a/content/concepts/tokens/non-fungible-tokens.ja.md +++ b/content/@i18n/ja/concepts/tokens/non-fungible-tokens.md @@ -8,13 +8,13 @@ labels: # NFTのコンセプトの概要 -XRP Ledgerは、_IOUs_ としても知られる[発行済み通貨](tokens.html)のサポートを提供しています。このような資産は、主に、代替可能(Fungible)です。 +XRP Ledgerは、_IOUs_ としても知られる[トークン](tokens.html)のサポートを提供しています。このような資産は、主に、代替可能(Fungible)です。 > 代替可能性 > > 1. 個々の単位が本質的に交換可能であり、各部分が別の部分と区別できない商品または商品の特性である -代替可能トークンは、XRP Ledgerの分散型取引所において、ユーザー間でXRPや他の発行済み通貨と手軽に交換することができます。そのため、決済に適しています。 +代替可能トークンは、XRP Ledgerの分散型取引所において、ユーザー間でXRPや他のトークンと手軽に交換することができます。そのため、決済に適しています。 例えば、切手などがそうです。1919年当時、あなたが航空便で手紙を送る必要がある場合、24セントの切手を購入し、封筒に張ったでしょう。もしその切手をなくしてしまったら、別の24セント切手を使うか、10セント切手2枚と2セント切手2枚を使うことができます。非常に使い勝手がいいのです。 @@ -44,7 +44,7 @@ XRP Ledgerでは、容量を節約するために、一つのアカウントで - 発行者が、現在の保有者に関係なく、トークンを焼却できるかどうか。 - トークンの保持者がトークンを他者に転送できるかどうか。( `NFToken` は常に発行者に直接送信したり、発行者から送信することが可能です)。 - 転送が許可されている場合、発行者は販売価格に対する一定の割合で手数料を徴収することができます。 -- NFTokenを[発行済み通貨](tokens.html)で売却できるか、XRPのみでしか売却できないか。 +- NFTokenを[トークン](tokens.html)で売却できるか、XRPのみでしか売却できないか。 ## `NFToken`のライフサイクル diff --git a/content/concepts/tokens/offers.ja.md b/content/@i18n/ja/concepts/tokens/offers.md similarity index 100% rename from content/concepts/tokens/offers.ja.md rename to content/@i18n/ja/concepts/tokens/offers.md diff --git a/content/concepts/tokens/paths.ja.md b/content/@i18n/ja/concepts/tokens/paths.md similarity index 95% rename from content/concepts/tokens/paths.ja.md rename to content/@i18n/ja/concepts/tokens/paths.md index ff6bcf31c1..46f01a2c92 100644 --- a/content/concepts/tokens/paths.ja.md +++ b/content/@i18n/ja/concepts/tokens/paths.md @@ -1,14 +1,14 @@ --- html: paths.html parent: tokens.html -blurb: 発行済み通貨の支払いは、接続されているユーザーのパスとオーダーブックを通す必要があります。 +blurb: トークンによる支払いは、接続されているユーザーのパスとオーダーブックを通す必要があります。 labels: - 支払い - 複数通貨間 --- # パス -XRP Ledgerでは、[発行済み通貨](tokens.html)の支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの[分散型取引所](decentralized-exchange.html)のオーダーを介して送金元と受取人を結び付けることで、[複数通貨間の支払い](cross-currency-payments.html)を可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。 +XRP Ledgerでは、[トークン](tokens.html)の支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの[分散型取引所](decentralized-exchange.html)のオーダーを介して送金元と受取人を結び付けることで、[複数通貨間の支払い](cross-currency-payments.html)を可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。 XRP Ledgerでは1つのPaymentトランザクションは複数のパスを使用でき、複数のソースの流動性を組み合わせて必要な額を送金することができます。そのため、トランザクションには使用可能なパスをまとめた _パスセット_ が含まれます。パスセットの中のパスでは開始時と終了時には同一通貨が使用される必要があります。 diff --git a/content/concepts/tokens/rippling.ja.md b/content/@i18n/ja/concepts/tokens/rippling.md similarity index 93% rename from content/concepts/tokens/rippling.ja.md rename to content/@i18n/ja/concepts/tokens/rippling.md index ebe9af15b2..b61b265dad 100644 --- a/content/concepts/tokens/rippling.ja.md +++ b/content/@i18n/ja/concepts/tokens/rippling.md @@ -1,14 +1,14 @@ --- html: rippling.html parent: tokens.html -blurb: Ripplingは、複数当事者間での発行済み通貨残高の自動ネット決済です。 +blurb: Ripplingは、複数当事者間でのトークン残高の自動ネット決済です。 labels: - トークン - 複数通貨間 --- # Rippling -XRP Ledgerでは、「Rippling」とは同一通貨の[トラストライン](trust-lines-and-issuing.html)を有する複数の接続当事者間での非可分なネット決済のプロセスを指しています。Ripplingは発行済み通貨の基幹的なプロセスです。Ripplingを利用すれば、同一イシュアーを信頼するユーザーは、そのイシュアーを受動的な仲介機関として発行済み残高を相互に送金できるようになります。Ripplingは、受動的かつ双方向の[通貨取引オーダー](offers.html)のようなもので、制限がなく、通貨コードが同一でイシュアーが異なる2つの通貨間の為替レートは1:1です。 +XRP Ledgerでは、「Rippling」とは同一通貨の[トラストライン](trust-lines-and-issuing.html)を有する複数の接続当事者間での非可分なネット決済のプロセスを指しています。Ripplingはトークンの基幹的なプロセスです。Ripplingを利用すれば、同一イシュアーを信頼するユーザーは、そのイシュアーを受動的な仲介機関として発行済み残高を相互に送金できるようになります。Ripplingは、受動的かつ双方向の[通貨取引オーダー](offers.html)のようなもので、制限がなく、通貨コードが同一でイシュアーが異なる2つの通貨間の為替レートは1:1です。 Ripplingは、支払[パス](paths.html)でのみ発生します。[XRP間の直接決済](direct-xrp-payments.html)にはRipplingは使用されません。 diff --git a/content/concepts/tokens/ticksize.ja.md b/content/@i18n/ja/concepts/tokens/ticksize.md similarity index 53% rename from content/concepts/tokens/ticksize.ja.md rename to content/@i18n/ja/concepts/tokens/ticksize.md index 59009f1a97..575a5d5d0a 100644 --- a/content/concepts/tokens/ticksize.ja.md +++ b/content/@i18n/ja/concepts/tokens/ticksize.md @@ -8,15 +8,15 @@ labels: --- # ティックサイズ -_([TickSize Amendment][]が必要です。)_ +_([TickSize Amendment][]により追加されました。)_ -オファーがオーダーブックに対して発行されると、そのオファーに関係する通貨のイシュアーによって設定された`TickSize`の値に基づいて、為替レートが切り捨てられます。トレーダーがXRPと発行済み通貨を交換するオファーを出した場合は、その発行済み通貨のイシュアーからの`TickSize`が適用されます。トレーダーが2種類の発行済み通貨を交換するオファーを出した場合は、小さい方の`TickSize`の値(有効数字の桁数が少ない値)がこのオファーに適用されます。いずれの通貨にも`TickSize`が設定されていない場合、デフォルトが適用されます。 +オファーがオーダーブックに対して発行されると、そのオファーに関係する通貨の発行者によって設定された`TickSize`の値に基づいて、為替レートが切り捨てられます。トレーダーがXRPとトークンを交換するオファーを出した場合は、そのトークンの発行者からの`TickSize`が適用されます。トレーダーが2種類のトークンを交換するオファーを出した場合は、小さい方の`TickSize`の値(有効数字の桁数が少ない値)がこのオファーに適用されます。いずれの通貨にも`TickSize`が設定されていない場合、デフォルトが適用されます。 -オーダーブックにオファーが発行されると、`TickSize` によりオファーの為替レートの _有効数字_ の桁数が切り捨てられます。イシュアーは[AccountSetトランザクション][]を使用して`TickSize`を`3`~`15`の整数に設定できます。為替レートは有効数字と指数で表されますが、`TickSize`は指数には影響しません。これにより、XRP Ledgerでは価値が大きく異なる資産(ハイパーインフレ通貨と希少通貨など)間の為替レートを表せます。イシュアーが設定する`TickSize`が小さいほど、トレーダーはより多くの増分をオファーして、既存のオファーよりも高い為替レートと見えるようにする必要があります。 +オーダーブックにオファーが発行されると、`TickSize` によりオファーの為替レートの _有効数字_ の桁数が切り捨てられます。発行者は[AccountSetトランザクション][]を使用して`TickSize`を`3`~`15`の整数に設定できます。為替レートは有効数字と指数で表されますが、`TickSize`は指数には影響しません。これにより、XRP Ledgerでは価値が大きく異なる資産(ハイパーインフレ通貨と希少通貨など)間の為替レートを表せます。発行者が設定する`TickSize`が小さいほど、トレーダーはより多くの増分をオファーして、既存のオファーよりも高い為替レートと見えるようにする必要があります。 `TickSize`は、オファーの即時に実行可能な部分には影響しません。(この理由から、`tfImmediateOrCancel`が指定されたOfferCreateトランザクションは`TickSize` の値の影響を受けません。)オファーを完全に実行できない場合、トランザクション処理エンジンは`TickSize`に基づいて為替レートを計算して切り捨てを行います。次にエンジンは、切り捨てた後の為替レートに一致するように、「重要性が低い」側からのオファーの残額を丸めます。デフォルトのOfferCreateトランザクション(「買い」オファー)の場合、`TakerPays`の額(購入額)が丸められます。`tfSell`フラグが有効な場合(「売り」オファー)`TakerGets`の額(売却額)が丸められます。 -イシュアーが`TickSize`を有効化、無効化、または変更する場合、以前の設定で発行されたオファーはその影響を受けません。 +発行者が`TickSize`を有効化、無効化、または変更する場合、以前の設定で発行されたオファーはその影響を受けません。 ## 参照項目 diff --git a/content/concepts/tokens/tokens.ja.md b/content/@i18n/ja/concepts/tokens/tokens.md similarity index 100% rename from content/concepts/tokens/tokens.ja.md rename to content/@i18n/ja/concepts/tokens/tokens.md diff --git a/content/concepts/tokens/transfer-fees.ja.md b/content/@i18n/ja/concepts/tokens/transfer-fees.md similarity index 98% rename from content/concepts/tokens/transfer-fees.ja.md rename to content/@i18n/ja/concepts/tokens/transfer-fees.md index 19ecbc07a5..cd01f5e01d 100644 --- a/content/concepts/tokens/transfer-fees.ja.md +++ b/content/@i18n/ja/concepts/tokens/transfer-fees.md @@ -1,7 +1,7 @@ --- html: transfer-fees.html parent: tokens.html -blurb: 通貨発行者は、自己の発行済み通貨の送金に手数料を課すことができます。 +blurb: 通貨発行者は、自己のトークンの送金に手数料を課すことができます。 labels: - 手数料 - トークン diff --git a/content/concepts/tokens/trust-lines-and-issuing.ja.md b/content/@i18n/ja/concepts/tokens/trust-lines-and-issuing.md similarity index 99% rename from content/concepts/tokens/trust-lines-and-issuing.ja.md rename to content/@i18n/ja/concepts/tokens/trust-lines-and-issuing.md index 5d1a8b4d78..5100405818 100644 --- a/content/concepts/tokens/trust-lines-and-issuing.ja.md +++ b/content/@i18n/ja/concepts/tokens/trust-lines-and-issuing.md @@ -31,7 +31,7 @@ labels: 1. [トレード](decentralized-exchange.html)によって、限度額以上のトークンを取得した場合 2. プラスの残高があるトラストラインの限度額を減らした場合 -3. [チェックの現金化](checks.html)によって、トークンを限度額以上取得する場合 (_[CheckCashMakesTrustLine amendment][]が必要です。_) +3. [チェックの現金化](checks.html)によって、トークンを限度額以上取得する場合 (_[CheckCashMakesTrustLine amendment][]により追加されました。_) ## トラストラインの設定 diff --git a/content/concepts/transactions/fees.ja.md b/content/@i18n/ja/concepts/transactions/fees.md similarity index 100% rename from content/concepts/transactions/fees.ja.md rename to content/@i18n/ja/concepts/transactions/fees.md diff --git a/content/concepts/transactions/about-canceling-a-transaction.ja.md b/content/@i18n/ja/concepts/transactions/finality-of-results/canceling-a-transaction.md similarity index 100% rename from content/concepts/transactions/about-canceling-a-transaction.ja.md rename to content/@i18n/ja/concepts/transactions/finality-of-results/canceling-a-transaction.md diff --git a/content/concepts/transactions/finality-of-results.ja.md b/content/@i18n/ja/concepts/transactions/finality-of-results/index.md similarity index 100% rename from content/concepts/transactions/finality-of-results.ja.md rename to content/@i18n/ja/concepts/transactions/finality-of-results/index.md diff --git a/content/concepts/transactions/look-up-transaction-results.ja.md b/content/@i18n/ja/concepts/transactions/finality-of-results/look-up-transaction-results.md similarity index 92% rename from content/concepts/transactions/look-up-transaction-results.ja.md rename to content/@i18n/ja/concepts/transactions/finality-of-results/look-up-transaction-results.md index e8e04709ee..8c9c83a15b 100644 --- a/content/concepts/transactions/look-up-transaction-results.ja.md +++ b/content/@i18n/ja/concepts/transactions/finality-of-results/look-up-transaction-results.md @@ -216,7 +216,7 @@ rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpnのアカウントの`ModifiedNode`エント ### 支払い -[Paymentトランザクション][]はXRP間の直接トランザクション、[複数通貨間の支払い](cross-currency-payments.html)、または[(XRP以外の)発行済み通貨](issued-currencies.html)での直接トランザクションを表します。発行済み通貨からXRPへのトランザクション、またはXRPから発行済み通貨へのトランザクションなど、XRP間の直接トランザクション以外はすべて[partial payment](partial-payments.html)が可能です。 +[Paymentトランザクション][]はXRP間の直接トランザクション、[複数通貨間の支払い](cross-currency-payments.html)、または[(XRP以外の)トークン](tokens.html)での直接トランザクションを表します。トークンからXRPへのトランザクション、またはXRPからトークンへのトランザクションなど、XRP間の直接トランザクション以外はすべて[partial payment](partial-payments.html)が可能です。 XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追跡されます。(XRPは[Escrowオブジェクト](escrow-object.html)および[PayChannelオブジェクト](paychannel.html)にも存在する可能性がありますが、Paymentトランザクションがそれらに影響を及ぼすことはありません。) @@ -224,11 +224,11 @@ XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追 支払いにLedgerEntryTypeが`AccountRoot`の`CreatedNode`が含まれている場合は、その支払いによってレジャーの[新しいアカウントへの資金供給](accounts.html#アカウントの作成)が行われたことを意味します。 -#### 発行済み通貨での支払い +#### トークンでの支払い -発行済み通貨を利用する支払いは、多少複雑です。 +トークンを利用する支払いは、多少複雑です。 -発行済み通貨残高の変更は、[トラストライン](trust-lines-and-issuing.html)を表す[RippleStateオブジェクト](ripplestate.html)にすべて反映されます。一方の当事者のトラストラインで残高が増加すると、相手側当事者の残高は同じ額だけ減少すると考えられます。このことは、メタデータには、RippleStateオブジェクトの共有`Balance`に対する1回の変更としてのみ記録されます。この変更が「増加」または「減少」のどちらで記録されるかは、どちらのアカウントのアドレスが数値として大きいかによって決まります。 +トークン残高の変更は、[トラストライン](trust-lines-and-issuing.html)を表す[RippleStateオブジェクト](ripplestate.html)にすべて反映されます。一方の当事者のトラストラインで残高が増加すると、相手側当事者の残高は同じ額だけ減少すると考えられます。このことは、メタデータには、RippleStateオブジェクトの共有`Balance`に対する1回の変更としてのみ記録されます。この変更が「増加」または「減少」のどちらで記録されるかは、どちらのアカウントのアドレスが数値として大きいかによって決まります。 1回の支払いは、複数のトラストラインとオーダーブックで構成される長い[パス](paths.html)をたどる場合があります。間接的に当事者間を接続する複数のトラストラインの残高を変更するプロセスを[Rippling](rippling.html)と呼びます。トランザクションの`Amount`フィールドに指定された`issuer`に応じて、支払先アカウントに結び付けられている複数のトラストライン(`RippleState`アカウント)で支払額を分割することもできます。 @@ -236,9 +236,9 @@ XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追 複数通貨間の支払いでは、[オファー](offer.html)の一部または全額を消費して、通貨コードとイシュアーが異なる通貨間で変更が行われます。トランザクションで`Offer`タイプの`DeletedNode`オブジェクトが示される場合は、全額が消費されたオファーを示しているか、または処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファーを示している可能性があります。トランザクションで`Offer`タイプの`ModifiedNode`が示される場合は、オファーの一部が消費されたことを示します。 -[トラストラインの`QualityIn`および`QualityOut`設定](trustset.html)は、トラストラインの一方の側における発行済み通貨の額に影響を与える可能性があるため、残高の数値の変化は、送金元におけるその通貨の額と異なります。`delivered_amount`は、受取人による評価額でいくら送金されたのかを示します。 +[トラストラインの`QualityIn`および`QualityOut`設定](trustset.html)は、トラストラインの一方の側におけるトークンの金額に影響を与える可能性があるため、残高の数値の変化は、送金元におけるその通貨の額と異なります。`delivered_amount`は、受取人による評価額でいくら送金されたのかを示します。 -送金額と受取額が[発行済み通貨の精度](currency-formats.html#発行済み通貨の精度)の範囲外である場合は、一方のトランザクションで0に丸められる金額が、他方から引き出される可能性があります。そのため、両当事者が、お互いの残高に1016倍の差があるときに取引をすると、丸めることによって少額の発行済み通貨が「作成」または「消却」される可能性があります。(XRPは丸められないので、XRPではこの状況は発生しません。) +送金額と受取額が[トークンの精度](currency-formats.html#トークンの精度)の範囲外である場合は、一方のトランザクションで0に丸められる金額が、他方から引き出される可能性があります。そのため、両当事者が、お互いの残高に1016倍の差があるときに取引をすると、丸めることによって少額のトークンが「作成」または「消却」される可能性があります。(XRPは丸められないので、XRPではこの状況は発生しません。) [パス](paths.html)の長さに応じて、複数通貨間の支払いのメタデータは _長く_ なります。例えば、[トランザクション8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B)では、rHaaans...が発行した2.788 GCBを送金しXRPを支払いますが、2人のイシュアーのUSDを経由し、2つのアカウントにXRPを支払います。r9ZoLsJからのEURをETHと交換する資金供給されていないオファーを削除し、変更された合計17の異なるレジャーオブジェクトのブックキーピングを行います。 @@ -267,7 +267,7 @@ XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追 } ``` -タイプ`Offer`の`ModifiedNode`は、成立し、かつ一部が消費されたオファーを示します。1つのトランザクションで多数のオファーを消費できます。2種類の発行済み通貨を交換するオファーが、[オートブリッジング](autobridging.html)によってXRPを交換するオファーを消費することもあります。両替取引のすべてまたは一部をオートブリッジングできます。 +タイプ`Offer`の`ModifiedNode`は、成立し、かつ一部が消費されたオファーを示します。1つのトランザクションで多数のオファーを消費できます。2種類のトークンを交換するオファーが、[オートブリッジング](autobridging.html)によってXRPを交換するオファーを消費することもあります。両替取引のすべてまたは一部をオートブリッジングできます。 LedgerEntryTypeが`Offer`の`DeletedNode`は、すべて消費された成立オファー、処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファー、または新しいオファーを発行する過程でキャンセルされたオファーを示すことができます。キャンセルされたオファーは識別できます。これは、キャンセルされたオファーを発行した`Account`は、そのオファーを削除するトランザクションの送信元であるためです。 @@ -303,7 +303,7 @@ LedgerEntryTypeが`Offer`の`DeletedNode`は、すべて消費された成立オ 削除するオファーがなかった場合でも、[OfferCancelトランザクション][]には、コード`tesSUCCESS`が含まれる可能性があります。トランザクションが実際にオファーを削除したことを確認するには、LedgerEntryTypeが`Offer`の`DeletedNode`を探します。削除されていなかった場合は、そのオファーは以前のトランザクションによってすでに削除された可能性があります。またはOfferCancelトランザクションで、`OfferSequence`フィールドに誤ったシーケンス番号が使用された可能性があります。 -OfferCreateトランザクションが、タイプが`RippleState`の`CreatedNode`を示す場合は、取引で受け取った発行済み通貨を保持するために、[オファーがトラストラインを作成した](offers.html#オファーとトラスト)ことを示しています。 +OfferCreateトランザクションが、タイプが`RippleState`の`CreatedNode`を示す場合は、取引で受け取ったトークンを保持するために、[オファーがトラストラインを作成した](offers.html#オファーとトラスト)ことを示しています。 ### Escrow @@ -361,7 +361,7 @@ Escrowトランザクションでは、関係する送金元の所有者準備 Payment Channelの作成時に、LedgerEntryTypeが`PayChannel`の`CreatedNode`を探します。また、送金元の残高の減少を示す、LedgerEntryTypeが`AccountRoot`の`ModifiedNode`も探す必要があります。アドレスが送金元に一致することを確認するために`FinalFields`の`Account`フィールドを探し、XRP残高の変化を確認するために`Balance`フィールドの差異を確認します。 -[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir)が有効な場合は、メタデータは宛先のアカウントの[所有者ディレクトリー](directorynode.html)を変更して、新しく作成されるPayment Channelをリストで示す必要もあります。これにより、アカウントがオープンPayment Channelの受取人である場合に、そのアカウントが[削除される](accounts.html#アカウントの削除)ことを防ぎます。(fixPayChanRecipientOwnerDir Amendmentが有効になる前にPayment Channelが作成された場合は、アカウントを削除できます。) +[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir)が有効な場合は、メタデータは宛先のアカウントの[所有者ディレクトリー](directorynode.html)を変更して、新しく作成されるPayment Channelをリストで示す必要もあります。これにより、アカウントがオープンPayment Channelの受取人である場合に、そのアカウントが[削除される](deleting-accounts.html)ことを防ぎます。(fixPayChanRecipientOwnerDir Amendmentが有効になる前にPayment Channelが作成された場合は、アカウントを削除できます。) Payment Channelの閉鎖を要求する方法は、Payment Channelの不変の`CancelAfter`時刻(作成時にのみ設定されます)以外にもいくつかあります。トランザクションでChannelの閉鎖をスケジュールする場合は、そのChannel用にLedgerEntryTypeが`PayChannel`の`ModifiedNode`エントリーがあり、`FinalFields`の`Expiration`フィールドには閉鎖時刻が新たに追加されています。以下の例は、送金元がクレームを清算せずにChannelを閉鎖するよう要求した場合に`PayChannel`に対して行われる変更を示します。 @@ -434,7 +434,7 @@ TrustSetトランザクションは、[`RippleState`オブジェクト](ripplest ### 疑似トランザクション -[疑似トランザクション](pseudo-transaction-types.html)にもメタデータがありますが、これらのトランザクションは通常のトランザクションのすべてのルールに従うとは限りません。これらのトランザクションは、実在のアカウントには関連付けられていないため(この`Account`の値は、[base58エンコード形式の数字の0](accounts.html#特別なアドレス)です)、レジャーのAccountRootオブジェクトを変更して`Sequence`シーケンス番号を増やしたり、XRPを消却したりしません。疑似トランザクションは、特別なレジャーオブジェクトに対して特定の変更のみを行います。 +[疑似トランザクション](pseudo-transaction-types.html)にもメタデータがありますが、これらのトランザクションは通常のトランザクションのすべてのルールに従うとは限りません。これらのトランザクションは、実在のアカウントには関連付けられていないため(この`Account`の値は、[base58エンコード形式の数字の0](addresses.html#特別なアドレス)です)、レジャーのAccountRootオブジェクトを変更して`Sequence`シーケンス番号を増やしたり、XRPを消却したりしません。疑似トランザクションは、特別なレジャーオブジェクトに対して特定の変更のみを行います。 - [EnableAmendment疑似トランザクション][]は、[Amendmentレジャーオブジェクト](amendments-object.html)を変更して、有効なAmendment、過半数の支持を得ている保留中のAmendment、および保留中の期間を追跡します。 - [SetFee疑似トランザクション][]は、[FeeSettingsレジャーオブジェクト](feesettings.html)を変更して、[トランザクションコスト](transaction-cost.html)および[必要準備金](reserves.html)のベースレベルを変更します。 diff --git a/content/concepts/transactions/transaction-malleability.ja.md b/content/@i18n/ja/concepts/transactions/finality-of-results/transaction-malleability.md similarity index 74% rename from content/concepts/transactions/transaction-malleability.ja.md rename to content/@i18n/ja/concepts/transactions/finality-of-results/transaction-malleability.md index c67ef5ee59..70b47ad6dd 100644 --- a/content/concepts/transactions/transaction-malleability.ja.md +++ b/content/@i18n/ja/concepts/transactions/finality-of-results/transaction-malleability.md @@ -12,15 +12,10 @@ labels: 展性のあるトランザクションは元のハッシュでのみ実行できると想定して、脆弱なソフトウェアが展性のあるトランザクションを送信した場合、トランザクションの状況を把握できなくなる可能性があります。最悪の場合、不正使用者がこの点を悪用して脆弱なシステムから資金を盗むことが可能です。 -次の2つの状況は、トランザクション展性の問題につながる可能性があります。 +XRP Ledgerのメインネット上では、**マルチ署名**トランザクションのみが、必要以上の署名がある場合、または承認された署名者が必要以上の追加署名を提供する場合に、変更可能です。優れた運用セキュリティはこれらの問題から保護することができます。ガイドラインについては[マルチシグの展性の緩和対策](#マルチシグの展性の緩和対策)をご覧ください。 -1. デフォルトの署名アルゴリズム(ECDSAとsecp256k1曲線)を使用して署名されたトランザクションにtfFullyCanonicalSigフラグが指定されていない。 +2014年以前は、デフォルトの署名アルゴリズムであるsecp256k1曲線を使用したECDSAの特性により、単一署名トランザクションを不正に変更することができました。レガシー署名ツールとの互換性のため、2020-07-03に[RequireFullyCanonicalSig Amendment][]が有効になるまでは、変更可能な単一署名トランザクションを作成して提出することが可能でした。(Ed25519鍵で署名されたトランザクション(cryptographic-keys.html#署名アルゴリズム)は、この問題に対して脆弱ではありませんでした)。 - **[tfFullyCanonicalSigフラグ](transaction-common-fields.html#グローバルフラグ)を使用** して、トランザクションに展性がないことを保証します。[Ed25519キーで署名されている](cryptographic-keys.html#署名アルゴリズム)トランザクションはこの問題に対して脆弱ではありませんが、 _すべての_ トランザクションにこのフラグを使用しても **特に不都合はありません** 。 - -2. トランザクションが[マルチシグ](multi-signing.html)であり、署名の数が必要以上に多い場合。元々トランザクションに必要な数を上回る署名がされていなかった場合でも、権限のある署名者が追加の署名を提供すると、このトランザクションが展性を得ることがあります。 - - 適切な運用セキュリティ対策を導入することで、このような問題を防ぐことができます。ガイドラインについては、[マルチシグの展性の緩和対策](#マルチシグの展性の緩和対策)を参照してください。 ## 背景 @@ -49,16 +44,9 @@ ECDSA署名はRおよびSと呼ばれる2つの整数で構成されています このように、 _完全に_ 正規である署名を使用する場合には、2つの有効な値のうちどちらを使用するかを選択し、もう一方が無効であることを宣言する必要があります。XRP Ledgerの作成者は、2つの有効な値(`S`と`N-S`)のいずれか _小さい方_ を任意に選択すると決めました。トランザクションが選択された(小さな)値`S`を使用し、正規トランザクションとなるためのすべての標準ルールに準拠している場合、このトランザクションは _完全に正規_ であるとみなされます。 -完全に正規である署名の生成が確実に行われていなかった古いソフトウェアとの互換性を維持するため、XRP Ledgerは完全に正規ではないトランザクションも受け入れます。新しいユーザーを悪用から保護するため、XRP Ledgerではトランザクション向けに[**tfFullyCanonicalSig**](transaction-common-fields.html#グローバルフラグ)というフラグがあります。このフラグが設定されている場合、トランザクションが有効となるには _完全に正規_ の署名を使用する必要があります。 +[RequireFullyCanonicalSig Amendment][](2020年に有効)では、すべてのトランザクションは_完全正規(fully canonical)な_署名のみを使用しなければなりません。 -完全に正規であるECDSA署名を計算するには、SとN-Sを比較していずれが小さいかを見極めて、トランザクションの`Signature`フィールドにその値を使用する必要があります。 - -Rippleが公開しているすべてのXRP Ledgerソフトウェア(`rippled`およびripple-lib/xrpl.jsを含む)では、完全に正規である署名のみが生成されます。ユーザーの保護を強化するため、Rippleは、可能な限りデフォルトで**tfFullyCanonicalSig**フラグを有効にするようにコードを構成しています。XRP Ledgerソフトウェアのサードパーティ実装においても、完全に正規である署名だけを生成し、デフォルトでトランザクションのtfFullyCanonicalSigが有効にすることを強く推奨します。 - -次の2つの状況においては、RippleのXRP Ledgerの署名実装によってtfFullyCanonicalSigフラグが自動的に有効になりません。次の状況では、フラグを慎重に設定する必要があります。 - -- ユーザーがトランザクションの`Flags`フィールドを明示的に指定している場合。ビット単位のORを使用してtfFullyCanonicalSig _と_ その他の必要なすべてのフラグを適用します。 -- ユーザーがトランザクションにマルチシグを提供する場合。マルチシグの複数の参加者は _厳密に_ 同一のデータに署名する必要があるので、署名コードはtfFullyCanonicalSigフラグを追加するというトランザクションの指示を事前に処理しません。マルチシグトランザクションでは、常にtfFullyCanonicalSigフラグを明示的に有効にしてください。 +2014年から2020年の間、XRP Ledgerは常に完全な正規署名を生成するわけではないレガシーソフトウェアと互換性がありましたが、トランザクションの脆弱性から互換性のあるソフトウェアを保護するために、トランザクションに[**tfullyCanonicalSig`**](transaction-common-fields.html#global-flags)と呼ばれるフラグを使用していました。このフラグは互換署名ソフトウェアがデフォルトで有効にしており、トランザクショ ンが有効であるために _完全正規な_ 署名を使用することを要求していました。[RequireFullyCanonicalSig Amendment][]が有効になったので、このフラグは必要なくなりましたが、いずれにせよ有効にしても害はありません。 ### マルチシグの展性 @@ -100,15 +88,7 @@ XRP Ledgerとのインフターフェイスに使用するソフトウェアか 1. 脆弱なシステムが、tfFullyCanonicalSigを有効にせずにトランザクションを生成し署名する。 - トランザクションでtfFullyCanonicalSigフラグが有効に設定されない状況として以下の3つがあります。 - - - システムが`Flags`フィールドを明示的に指定し、このフィールドでtfFullyCanonicalSigビットが有効になっていない。 - - トランザクションがマルチシグであり、tfFullyCanonicalSigフラグが明示的に有効にされていない。 - - システムでトランザクションのフィールドから`Flags`フィールドが省略されているが、署名時にtfFullyCanonicalSigを自動的に有効にしない非標準の実装が使用されている。 - - トランザクションがECDSAキーペアで署名されている場合、そのトランザクションは脆弱になります。マルチシグの場合、トランザクションの署名に少なくとも1つのECDSAキーペアが使用される必要があります。 - - ほとんどの場合、脆弱なトランザクションには完全に正規である署名が使用されていますが、トランザクションが完全に正規ではない署名を使用していても、フラグはそのトランザクションが有効であると示します。また、限られた時間内に最終結果が判かるように、トランザクションで`LastLedgerSequence`が使用されていることもあります。 + 承認された署名者が悪意のある、あるいは無責任な場合、その署名者の署名が含まれていないにもかかわらず追加される可能性がある場合、そのトランザクションも脆弱になる可能性があります。 2. システムは脆弱なトランザクションの識別用ハッシュを確認し、そのハッシュをXRP Ledgerネットワークに送信し、検証済みレジャーバージョンにそのハッシュが記録されるのを監視し始めます。 @@ -118,6 +98,8 @@ XRP Ledgerとのインフターフェイスに使用するソフトウェアか 異なるトランザクション指示の署名を作成する場合とは異なり、この場合は大量の計算処理は不要です。最初に署名を生成する場合よりもかなり短い時間で完了する可能性があります。 + あるいは、その署名がまだトランザクションの一部でない承認された署名者は、脆弱なトランザクションの署名リストに自分の署名を追加することができます。送信者のマルチシグの設定によっては、これはトランザクションから他の署名を削除する代わりに、あるいはそれに加えて行われるかもしれません。 + 改ざんされた署名により、異なる識別用ハッシュが生成されます。(ネットワークに送信する前にハッシュを計算する必要はありませんが、ハッシュがあれば後でトランザクションのステータスを容易に確認できることを理解しています。) 5. 不正使用者が改ざんした(完全に正規ではない可能性のある)トランザクションをネットワークに送信します。 @@ -149,6 +131,20 @@ XRP Ledgerとのインフターフェイスに使用するソフトウェアか さらに、脆弱なシステムがトランザクションを置き換えるために新しいトランザクションを生成し、ネットワークの現在の状態に基づいて新しい`Sequence`、`LastLedgerSequence`、および`Fee`パラメーターを選択し、その一方でトランザクションの残りの部分は本来のトランザクションと同じ状態で維持することがあります。この新しいトランザクションにも展性がある場合、システムは何度も同じように悪用される可能性があります。 +## 関連項目 + +- **コンセプト:** + - [トランザクション](transactions.html) + - [結果のファイナリティー](finality-of-results.html) +- **チュートリアル:** + - [トランザクションの結果の確認](look-up-transaction-results.html) + - [信頼できるトランザクションの送信](reliable-transaction-submission.html) +- **リファレンス:** + - [基本的なデータ型 - ハッシュ](basic-data-types.html#ハッシュ) + - [トランザクションの共通フィールド](transaction-common-fields.html#グローバルフラグ) + - [トランザクションの結果](transaction-results.html) + - [シリアル化フォーマット](serialization.html) + {% include '_snippets/rippled-api-links.md' %} {% include '_snippets/tx-type-links.md' %} diff --git a/content/concepts/transactions/transactions.ja.md b/content/@i18n/ja/concepts/transactions/index.md similarity index 99% rename from content/concepts/transactions/transactions.ja.md rename to content/@i18n/ja/concepts/transactions/index.md index 328c8ce134..e15ba1148e 100644 --- a/content/concepts/transactions/transactions.ja.md +++ b/content/@i18n/ja/concepts/transactions/index.md @@ -13,7 +13,7 @@ _トランザクション(取引)_ は、XRP Ledgerを変更する唯一の トランザクションで行えることは、送金だけではありません。XRP Ledgerのトランザクションは、さまざまな[支払いタイプ](payment-types.html)に対応しているだけでなく、[暗号鍵](cryptographic-keys.html)のローテーション、その他の設定の管理、およびXRP Ledgerの[分散型取引所](decentralized-exchange.html)での取引にも使用されます。[トランザクションタイプの詳細なリスト](transaction-types.html)については、[`rippled` APIリファレンス](http-websocket-apis.html)を参照してください。 -### トランザクションの識別 +### トランザクションの識別 署名付きトランザクションには、それを識別する固有の`"hash"`があります。トランザクションを送信すると、サーバーの応答でハッシュが返されます。[account_txコマンド](account_tx.html)を使用して、アカウントのトランザクション履歴でトランザクションを検索することもできます。 @@ -87,7 +87,7 @@ JSON形式の未署名の[Paymentトランザクション][]の例を次に示 } ``` -XRP Ledgerは、トランザクションオブジェクトが送信元アドレス(`Account`内)フィールドによって承認されている場合にのみ、トランザクションを中継して実行します。これを安全に行う方法については、[安全な署名の設定](secure-signing.html)を参照してください。 +XRP Ledgerは、トランザクションオブジェクトが送信元アドレス(`Account`内)フィールドによって承認されている場合にのみ、トランザクションを中継して実行します。これを安全に行う方法については、[安全な署名の設定](secure-signing.html)を参照してください。 ## 署名付きトランザクションブロブの例 diff --git a/content/concepts/transactions/reliable-transaction-submission.ja.md b/content/@i18n/ja/concepts/transactions/reliable-transaction-submission.md similarity index 100% rename from content/concepts/transactions/reliable-transaction-submission.ja.md rename to content/@i18n/ja/concepts/transactions/reliable-transaction-submission.md diff --git a/content/concepts/transactions/set-up-secure-signing.ja.md b/content/@i18n/ja/concepts/transactions/secure-signing.md similarity index 84% rename from content/concepts/transactions/set-up-secure-signing.ja.md rename to content/@i18n/ja/concepts/transactions/secure-signing.md index 5c7bd4124a..6852e4484a 100644 --- a/content/concepts/transactions/set-up-secure-signing.ja.md +++ b/content/@i18n/ja/concepts/transactions/secure-signing.md @@ -26,7 +26,6 @@ labels: {{ include_svg("img/insecure-signing-options.svg", "安全でない構成の図") }} - 外部のソースからあなたの秘密鍵にアクセスできる構成は危険で、不正使用者によってあなたのすべてのXRP(およびあなたのXRP Ledgerのアドレスにあるすべてのもの)が盗まれる可能性があります。そのような構成の例としては、インターネット経由で他の人の`rippled`サーバーの[signメソッド][]を使用する構成や、秘密鍵をインターネットを経由してプレーンテキストで自己所有サーバーに送信する構成などがあります。 秘密鍵の秘匿性は常に保持する必要があります。自分にメールで送信したり、人の目に触れるところで入力したりしてはいけません。秘密鍵を使用しないときは、決してプレーンテキストではなく、暗号化された形式で保存する必要があります。セキュリティと利便性のバランスは、アドレスの保有額によっても変わります。さまざまな目的に合わせてさまざまなセキュリティ構成の複数のアドレスを使用することをお勧めします。 @@ -70,21 +69,32 @@ labels: ## ローカル署名機能のあるクライアントライブラリを使用する -{{ include_svg("img/secure-signing-client-library.svg", "[ローカル署名機能のあるクライアントライブラリを使用する構成の図") }} +{{ include_svg("img/secure-signing-client-library.svg", "ローカル署名機能のあるクライアントライブラリを使用する構成の図") }} -この構成では、トランザクションにローカルで署名するために使用しているプログラミング言語のクライアントライブラリを使用します。使用しているプログラミング言語に対応するクライアントライブラリが必要です。Rippleは、XRP Ledgerのトランザクションにローカルで署名することができる次のクライアントライブラリを公開しています。 +この構成では、使用するプログラミング言語で、署名を組み込んだクライアントライブラリを使用します。ローカル署名を実行できるライブラリの一覧は、[クライアントライブラリ](client-libraries.html)を参照してください。 -- **xrpl.js (JavaScript / TypeScript)** - - [設定](get-started-using-javascript.html) - - [APIリファレンス](https://js.xrpl.org/) -- **Signing Library for C++**(`rippled`に付属) - - [ドキュメント](https://github.com/XRPLF/rippled/tree/develop/Builds/linux#signing-library) +### 署名ライブラリのセキュリティベストプラクティス -Rippleが公開したものでないクライアントライブラリを使用する場合は、そのライブラリが実装している署名アルゴリズムの実装が適切で安全であることを確認してください。(例えば、クライアントライブラリがデフォルトのECDSAアルゴリズムを使用している場合は、そのライブラリは[RFC6979](https://tools.ietf.org/html/rfc6979)に記載されているとおりに決定論的ノンスを使用している必要があります。)Rippleが公開している上記のすべてのライブラリは、業界のベストプラクティスに従っています。 +署名ライブラリのセキュリティを最適化するために、次のベストプラクティスを使用してください。 -最高レベルのセキュリティを実現するために、クライアントライブラリを安定した最新バージョンの状態に保ってください。 +* 使用する署名ライブラリが、署名アルゴリズムを適切かつ安全に実装 していることを確認してください。例えば、ライブラリがデフォルトのECDSAアルゴリズムを使用する場合、[RFC-6979](https://tools.ietf.org/html/rfc6979)に記述されているように、決定論的なnoncesも使用すべきです。 -### クライアントライブラリを使用したローカル署名の例 + 上記のすべての公開ライブラリは、業界のベストプラクティスに従っています。 + + +* クライアントライブラリを最新の安定版に更新してください。 + +* セキュリティ強化のため、[Vault](https://www.vaultproject.io/)などの管理ツールから秘密鍵を読み込みます。 + +### ローカル署名の例 + +以下は、以下の言語とライブラリを使用して、ローカルでトランザクションに署名する方法の例です。 + +* **JavaScript** / **TypeScript** - [`xrpl.js`](https://github.com/XRPLF/xrpl.js) + +* **Python** - [`xrpl-py`](https://github.com/XRPLF/xrpl-py) + +* **Java** - [`xrpl4j`](https://github.com/XRPLF/xrpl4j) @@ -108,9 +118,6 @@ Rippleが公開したものでないクライアントライブラリを使用 -セキュリティを強化するために、[Vault](https://www.vaultproject.io/)などの管理ツールから秘密鍵を読み込みます。 - - ## 専用の署名デバイスを使用する {{ include_svg("img/secure-signing-dedicated-hardware.svg", "専用の署名ハードウェアの使用の図") }} @@ -144,6 +151,8 @@ Rippleが公開したものでないクライアントライブラリを使用 - [submitメソッド][] - [xrpl.jsリファレンス](https://js.xrpl.org/) - [`xrpl-py`リファレンス](https://xrpl-py.readthedocs.io/) + - [`xrpl4j` Reference](https://javadoc.io/doc/org.xrpl/) + diff --git a/content/@i18n/ja/concepts/transactions/source-and-destination-tags.md b/content/@i18n/ja/concepts/transactions/source-and-destination-tags.md new file mode 100644 index 0000000000..8f68cb729d --- /dev/null +++ b/content/@i18n/ja/concepts/transactions/source-and-destination-tags.md @@ -0,0 +1,56 @@ +--- +html: source-and-destination-tags.html +parent: transactions.html +blurb: 送信元タグと宛先タグを使用して、多目的アドレスからの、または多目的アドレスへの支払いを行います。 +labels: + - 支払い + - アカウント + - セキュリティ +--- +# 送信元タグと宛先タグ + +_送信元タグ_と_宛先タグ_は、XRP Ledgerの[支払い](payment-types.html)機能で、多目的アドレスからの支払いや多目的アドレスへの支払いの特定の目的を示すことができます。送信元タグと宛先タグは、台帳上の直接的な機能を持ちません。送信元タグと宛先タグは、台帳外のシステムがどのように支払いを処理すべきかについての情報を提供するだけです。トランザクションでは、送信元タグも宛先タグも 32ビット符号なし整数の形式です。 + +宛先タグは、支払いの受取人または宛先を示します。例えば、[取引所](list-xrp-as-an-exchange.html) や [ステーブルコインの発行者](stablecoin-issuer.html)アドレスへの支払いは、宛先タグを使用して、そのビジネス自体のシステム内で支払額を与信するユーザを表すことができます。店舗・業者への支払いは、その支払いがどの商品を購入するのかを表すことができます。 + +送信元タグは、支払いの送信者または送信元を示します。最も一般的なのは、受取人に対する返金時の送信先として送信元タグを使用することです。返金する場合は、受領した支払いの送信元タグを返金支払いの宛先タグとして使用する必要があります。 + +顧客に、別のインターフェースを使用してXRP Ledgerアドレスからトランザクションを送受信する機能を提供することを、_ホストされたアカウント_の提供と呼びます。ホストされたアカウントでは通常、顧客ごとに送信元タグと宛先タグを使用します。 + +**ヒント:** [Xアドレス](https://xrpaddress.info/)は、従来のアドレスとタグを組み合わせて、両方をエンコードして1つのアドレスにしたものです。顧客に入金アドレスを示す場合、顧客にアドレスとタグの2つの情報を管理させるよりも、Xアドレスを使用する方が顧客にとって簡単かもしれません。(Xアドレスのタグは、送信時には送信元タグとして、受信時には宛先タグとして機能します)。 + +## 理由 + +他の分散型台帳では、顧客ごとに異なる入金アドレスを使用するのが一般的です。XRP Ledgerでは、支払いを受け取るためには、そのアドレスは入金され有効化済みの[アカウント](accounts.html)でなければなりません。XRP Ledgerで他と同じアプローチを用いると、ネットワーク内の全てのサーバのリソースを無駄に消費し、各アドレスに対して[準備金](reserves.html)の金額を無制限に確保しなければならな苦なり、大きなコストがかかります。 + +送信元タグと宛先タグは、入金と支払いを個別の顧客にマッピングする、より軽量な方法を提供します。 + +## ユースケース + +ビジネスにおいては、複数の目的で送信元タグと宛先タグを使用する場合があります: + +- 顧客アカウントへの直接マッピング +- 返金された支払いを、その支払いを行った支払元にマッピング +- 期限切れの見積もりへの支払いのマッピング +- 顧客が特定の入金に対して生成できる使い捨てタグの提供 + +プライバシーを保護しながらタグの重複を防ぐために、ビジネスでは利用可能なタグの全範囲を目的ごとに分割し、その範囲内でタグを予測不可能な順序で割り当てることができます。例えば、[SHA-256](https://ja.wikipedia.org/wiki/SHA-2)のような暗号ハッシュ関数を使用し、[剰余演算](https://ja.wikipedia.org/wiki/剰余演算)を使用して出力を関連するセクションのサイズにマッピングします。安全のため、新しいタグを使う前に古いタグとの衝突をチェックしてください。 + +タグを番号順に割り当てると、顧客のプライバシーが損なわれます。XRP Ledgerのトランザクションはすべて公開されているため、番号順でタグを割り当てると、タグとユーザのアドレスの対応を推測したり、使用されているタグに基づいてユーザのアカウントに関する情報を導き出したりすることが可能になります。 + + +## タグの必須化 + +複数の顧客口座への支払いを受け取る可能性があるXRP Ledgerアドレスにとって、宛先タグなしで支払いを受け取ることは問題です。どの顧客に入金すべきかがすぐに分からないため、手作業が必要になったり、誰が受取人であったかを特定するために送金者とやり取りをしなければならなくなったりします。このようなケースを減らすために、[`RequireDest`設定を有効にする](require-destination-tags.html)ことができます。そうすることで、もしユーザが支払先にタグを設定し忘れた場合、XRP Ledgerはその支払いを拒否します。その後、ユーザはそのタグを使って再度支払いを行うことができます。 + + +## 関連項目 + +- [宛先タグの必須化](require-destination-tags.html) +- [支払いのタイプ](payment-types.html) + + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/transactions/transaction-cost.ja.md b/content/@i18n/ja/concepts/transactions/transaction-cost.md similarity index 99% rename from content/concepts/transactions/transaction-cost.ja.md rename to content/@i18n/ja/concepts/transactions/transaction-cost.md index f658950beb..95612426de 100644 --- a/content/concepts/transactions/transaction-cost.ja.md +++ b/content/@i18n/ja/concepts/transactions/transaction-cost.md @@ -29,7 +29,7 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ | [Key Resetトランザクション](#key-resetトランザクション)| 0 | | [マルチシグトランザクション](multi-signing.html)| 10 drop × (1 + 署名の数) | | [フルフィルメントを伴うEscrowFinishトランザクション](escrowfinish.html)| 10 drop × (33 + (バイト単位のフルフィルメントサイズ ÷ 16)) | -| [AccountDeleteトランザクション](accounts.html#アカウントの削除)| 2,000,000 drop | +| [AccountDeleteトランザクション](deleting-accounts.html)| 2,000,000 drop | ## トランザクションコストの受取人 diff --git a/content/concepts/transactions/transaction-queue.ja.md b/content/@i18n/ja/concepts/transactions/transaction-queue.md similarity index 100% rename from content/concepts/transactions/transaction-queue.ja.md rename to content/@i18n/ja/concepts/transactions/transaction-queue.md diff --git a/content/contributing/report-a-scam.ja.md b/content/@i18n/ja/contributing/report-a-scam.md similarity index 99% rename from content/contributing/report-a-scam.ja.md rename to content/@i18n/ja/contributing/report-a-scam.md index a8267d3edc..82d05b274a 100644 --- a/content/contributing/report-a-scam.ja.md +++ b/content/@i18n/ja/contributing/report-a-scam.md @@ -3,6 +3,7 @@ html: report-a-scam.html parent: contribute.html --- # 詐欺の報告 + 発展する業界において、信頼とセキュリティは非常に重要ですが、詐欺はクリプトとブロックチェーンの進歩を妨げ続けています。Xrplorer forensicsチームのようなXRP Ledgerコミュニティ全体の個人やチームは、詐欺を報告するための無料ツールを提供することで、これらの詐欺行為を抑制する手助けをしています。 ## 報告する diff --git a/content/faq.ja.md b/content/@i18n/ja/faq.md similarity index 100% rename from content/faq.ja.md rename to content/@i18n/ja/faq.md diff --git a/content/infrastructure/rippled/commandline-usage.ja.md b/content/@i18n/ja/infrastructure/commandline-usage.md similarity index 97% rename from content/infrastructure/rippled/commandline-usage.ja.md rename to content/@i18n/ja/infrastructure/commandline-usage.md index 420dd4609c..096a437e42 100644 --- a/content/infrastructure/rippled/commandline-usage.ja.md +++ b/content/@i18n/ja/infrastructure/commandline-usage.md @@ -1,6 +1,6 @@ --- html: commandline-usage.html -name: Commandline Usage +name: コマンドラインの使い方 parent: infrastructure.html blurb: rippledサーバーのコマンドライン使用オプションです。 curated_anchors: @@ -17,9 +17,9 @@ curated_anchors: labels: - コアサーバー --- -# rippledコマンドライン使用リファレンス +# コマンドラインの使い方 -`rippled`実行可能ファイルは、通常はXRP Ledgerを処理するデーモンとして実行されますが、他のモードでも実行できます。このページでは、コマンドラインから実行する場合に`rippled`に渡すことができるすべてのオプションを説明します。 +`rippled`の実行可能ファイルは、通常はXRP Ledgerを処理するデーモンとして実行されますが、他のモードでも実行できます。このページでは、コマンドラインから実行する場合に`rippled`に渡すことができるすべてのオプションを説明します。 ## 使用できるモード @@ -69,7 +69,6 @@ rippled [OPTIONS] 次のフィールドは廃止されました: `--validateShards`。 [削除: rippled 1.7.0][] - ## スタンドアロンモードのオプション ```bash @@ -161,7 +160,7 @@ rippled --unittest=print `print`は、使用可能なテストとそのパッケージのリストを出力する特殊な単体テストです。 -#### 手動単体テスト +#### 手動の単体テスト 完了に時間を要する一部の単体テストは、「手動」に分類されています。このようなテストについては、`print`単体テストの出力に`|M|`と表示されます。すべての単体テストまたは単体テストのパッケージを実行するときには、手動テストはデフォルトで実行されません。手動テストを個別に実行するには、テスト名を指定します。例: diff --git a/content/infrastructure/rippled/configuration/configure-amendment-voting.ja.md b/content/@i18n/ja/infrastructure/configuration/configure-amendment-voting.md similarity index 84% rename from content/infrastructure/rippled/configuration/configure-amendment-voting.ja.md rename to content/@i18n/ja/infrastructure/configuration/configure-amendment-voting.md index 8f6531efdc..984962a78d 100644 --- a/content/infrastructure/rippled/configuration/configure-amendment-voting.ja.md +++ b/content/@i18n/ja/infrastructure/configuration/configure-amendment-voting.md @@ -6,9 +6,9 @@ labels: - コアサーバー - ブロックチェーン --- -# 修正投票機能の設定 +# Amendment投票機能の設定 -バリデーターとして設定されたサーバーは、[feature method][]を使ってXRP Ledgerプロトコルの[修正案(amendments)](amendments.html)に投票することができます。(この方法には[管理者アクセス](get-started-using-http-websocket-apis.html#管理者アクセス権限)が必要です). +バリデーターとして設定されたサーバーは、[feature メソッド][]を使ってXRP Ledgerプロトコルの[Amendment](amendments.html)に投票することができます。(この方法には[管理者アクセス](get-started-using-http-websocket-apis.html#管理者アクセス権限)が必要です). 例えば、「SHAMapV2」Amendmentに反対票を投じるには、以下のコマンドを実行します。 @@ -51,7 +51,7 @@ rippled feature SHAMapV2 reject ## 設定ファイルを使用する -もし、修正票の設定に設定ファイルを使いたい場合は、`[rpc_startup]` 節に行を追加して、起動時に各明示票のために自動的にコマンドを実行させることができます。例えば +もし、Amendmentの設定に設定ファイルを使いたい場合は、`[rpc_startup]` 節に行を追加して、起動時に各明示票のために自動的にコマンドを実行させることができます。例えば ``` [rpc_startup] diff --git a/content/infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.ja.md b/content/@i18n/ja/infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md similarity index 100% rename from content/infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.ja.md rename to content/@i18n/ja/infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md diff --git a/content/infrastructure/rippled/configuration/configure-advisory-deletion.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/configure-advisory-deletion.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-advisory-deletion.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/configure-advisory-deletion.md diff --git a/content/infrastructure/rippled/configuration/configure-full-history.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/configure-full-history.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-full-history.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/configure-full-history.md diff --git a/content/infrastructure/rippled/configuration/configure-history-sharding.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/configure-history-sharding.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-history-sharding.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/configure-history-sharding.md diff --git a/content/infrastructure/rippled/configuration/configure-online-deletion.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/configure-online-deletion.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-online-deletion.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/configure-online-deletion.md diff --git a/content/concepts/networks-and-servers/ledger-history/history-sharding.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/history-sharding.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/history-sharding.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/history-sharding.md diff --git a/content/@i18n/ja/infrastructure/configuration/data-retention/index.md b/content/@i18n/ja/infrastructure/configuration/data-retention/index.md new file mode 100644 index 0000000000..22acf7ba01 --- /dev/null +++ b/content/@i18n/ja/infrastructure/configuration/data-retention/index.md @@ -0,0 +1,9 @@ +--- +html: data-retention.html +parent: configure-rippled.html +template: pagetype-category.html.jinja +blurb: サーバが保存するデータの量と、古いデータを削除するタイミングを制御します。 +--- +# データの保存 + +サーバが保存するデータの量と、古いバージョンのレジャーステートや過去のトランザクションを含む古いデータを削除するタイミングを制御します。 diff --git a/content/concepts/networks-and-servers/ledger-history/online-deletion.ja.md b/content/@i18n/ja/infrastructure/configuration/data-retention/online-deletion.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/online-deletion.ja.md rename to content/@i18n/ja/infrastructure/configuration/data-retention/online-deletion.md diff --git a/content/infrastructure/rippled/configuration/enable-public-signing.ja.md b/content/@i18n/ja/infrastructure/configuration/enable-public-signing.md similarity index 100% rename from content/infrastructure/rippled/configuration/enable-public-signing.ja.md rename to content/@i18n/ja/infrastructure/configuration/enable-public-signing.md diff --git a/content/@i18n/ja/infrastructure/configuration/index.md b/content/@i18n/ja/infrastructure/configuration/index.md new file mode 100644 index 0000000000..be63483bc5 --- /dev/null +++ b/content/@i18n/ja/infrastructure/configuration/index.md @@ -0,0 +1,9 @@ +--- +html: configure-rippled.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: rippledサーバーの構成をカスタマイズします。 +--- +# rippledの設定 + +rippledサーバーの構成をカスタマイズします。 \ No newline at end of file diff --git a/content/infrastructure/rippled/configure-peering/cluster-rippled-servers.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/cluster-rippled-servers.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/cluster-rippled-servers.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/cluster-rippled-servers.md diff --git a/content/infrastructure/rippled/configure-peering/configure-a-private-server.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/configure-a-private-server.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/configure-a-private-server.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/configure-a-private-server.md diff --git a/content/infrastructure/rippled/configure-peering/forward-ports-for-peering.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/forward-ports-for-peering.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/forward-ports-for-peering.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/forward-ports-for-peering.md diff --git a/content/infrastructure/rippled/configure-peering/configure-peering.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/index.md similarity index 90% rename from content/infrastructure/rippled/configure-peering/configure-peering.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/index.md index b46efe97a4..7365db869f 100644 --- a/content/infrastructure/rippled/configure-peering/configure-peering.ja.md +++ b/content/@i18n/ja/infrastructure/configuration/peering/index.md @@ -1,9 +1,9 @@ --- html: configure-peering.html -name: Peering +name: ピアリング parent: infrastructure.html template: pagetype-category.html.jinja -blurb: サーバーをピアツーピアネットワークに接続する方法を設定します。 +blurb: サーバをピアツーピアネットワークに接続する方法を設定します。 labels: - コアサーバー --- diff --git a/content/infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md diff --git a/content/infrastructure/rippled/configure-peering/set-max-number-of-peers.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/set-max-number-of-peers.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/set-max-number-of-peers.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/set-max-number-of-peers.md diff --git a/content/infrastructure/rippled/configure-peering/use-a-peer-reservation.ja.md b/content/@i18n/ja/infrastructure/configuration/peering/use-a-peer-reservation.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/use-a-peer-reservation.ja.md rename to content/@i18n/ja/infrastructure/configuration/peering/use-a-peer-reservation.md diff --git a/content/@i18n/ja/infrastructure/configuration/server-modes/index.md b/content/@i18n/ja/infrastructure/configuration/server-modes/index.md new file mode 100644 index 0000000000..7ad0488084 --- /dev/null +++ b/content/@i18n/ja/infrastructure/configuration/server-modes/index.md @@ -0,0 +1,9 @@ +--- +html: server-modes.html +parent: configure-rippled.html +template: pagetype-category.html.jinja +blurb: コアサーバを用途別に適した様々なモードで運用する方法を紹介します。 +--- +# サーバの種類 + +XRP Ledgerのコアサーバは、用途別に適した様々なモードで実行することができます。 diff --git a/content/infrastructure/rippled/configuration/run-rippled-as-a-wallet-server.ja.md b/content/@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md similarity index 100% rename from content/infrastructure/rippled/configuration/run-rippled-as-a-wallet-server.ja.md rename to content/@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md diff --git a/content/infrastructure/rippled/configuration/run-rippled-as-a-validator.ja.md b/content/@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md similarity index 89% rename from content/infrastructure/rippled/configuration/run-rippled-as-a-validator.ja.md rename to content/@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md index 8ba00df322..ac7d0582a3 100644 --- a/content/infrastructure/rippled/configuration/run-rippled-as-a-validator.ja.md +++ b/content/@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md @@ -24,29 +24,33 @@ top_nav_name: UNLに参加しよう バリデータが _信頼できる_ バリデータではない場合も、ネットワークの全体的な健全性に関して、重要な役割を果たすことに変わりはありません。これらのバリデータは、信頼できるバリデータを評価するための基準の確立を支援します。例えば、信頼できるバリデータが、UNLに含まれていない多数のバリデータに対して異議を唱えている場合、問題があることを示しているおそれがあります。 +**注意:** バリデータは外部からはアクセスするべきものではありません。バリデータサーバへの一般からのWebSocketアクセスやその他の一般からのアクセスを許可してはいけません。 + ## 1. 優れたバリデータの特徴の理解 -バリデータ(サーバー)が以下の特質を常に備えるよう努めます。優れたバリデータであることは、`rippled`サーバーの運用者や[https://vl.ripple.com](https://vl.ripple.com)などのバリデータリスト発行者が、バリデータを彼らのUNLに追加する際に、バリデータを信頼する上で後押しになります。 +バリデータ(サーバー)が以下の特質を常に備えるよう努めます。優れたバリデータであることは、`rippled`サーバーの運用者やバリデータリスト発行者(https://vl.ripple.com や https://vl.xrplf.orgなど)が、バリデータを彼らのUNLに追加する際に、バリデータを信頼する上で後押しになります。 - **可用性** - 優れたバリデータは、常に稼働し、提案されるあらゆるレジャーについて検証投票を送信します。100%のアップタイムを実現するよう努めてください。 + 優れたバリデータは、常に稼働し、提案されるあらゆるレジャーについて検証投票を送信します。100%のアップタイムを実現するよう努めてください。 - **合意** - 優れたバリデータの投票は、可能な限り高い頻度で、コンセンサスプロセスの結果と合致します。これに該当しない場合は、バリデータのソフトウェアが最新のものではないか、不具合があるか、意図的な偏りがあることを示唆している可能性があります。常に[最新の`rippled`リリース](https://github.com/XRPLF/rippled/tree/master)を、修正を加えることなく実行します。新規リリースについて知るために、[`rippled`のリリースを確認](https://github.com/XRPLF/rippled/releases)してください。 + 優れたバリデータの投票は、可能な限り高い頻度で、コンセンサスプロセスの結果と合致します。これに該当しない場合は、バリデータのソフトウェアが最新のものではないか、不具合があるか、意図的な偏りがあることを示唆している可能性があります。常に[最新の`rippled`リリース](https://github.com/XRPLF/rippled/tree/master)を、修正を加えることなく実行します。新規リリースについて知るために、[`rippled`のリリースを確認](https://github.com/XRPLF/rippled/releases)してください。 - **適時の投票** - 優れたバリデータの投票は、コンセンサスラウンドが終了する前に、素早く届きます。適時の投票を維持するには、バリデータが推奨される[システム要件](system-requirements.html)を満たしていることを確認してください。これには、高速のインターネット接続が含まれます。 + 優れたバリデータの投票は、コンセンサスラウンドが終了する前に、素早く届きます。適時の投票を維持するには、バリデータが推奨される[システム要件](system-requirements.html)を満たしていることを確認してください。これには、高速のインターネット接続が含まれます。 + + バリデータを使って新しいトランザクションを送信したりデータを検索したりすることは可能ですが、APIクエリの負荷が高くなるとバリデータがコンセンサスに追いつけなくなる可能性があります。APIの負荷が十分軽ければ、サーバを両方の目的に使うことができます。理想的には、バリデータはコンセンサスに参加するために特化したものであるべきです。 - **身元の確さ** - 優れたバリデータには、身元が明確な所有者が存在します。[ドメイン検証](#6-ドメイン検証の提供)を提供することは、その第一歩になります。XRP LedgerネットワークのUNLに、多くの法的な管轄域および地域のさまざまな所有者によって運営されているバリデータが含まれていると理想的です。結果として、信頼できるバリデータの公正な運用が地域特有の事象によって損なわれるおそれが低減されます。 + 優れたバリデータには、身元が明確な所有者が存在します。[ドメイン検証](#6-ドメイン検証の提供)を提供することは、その第一歩になります。XRP LedgerネットワークのUNLに、多くの法的な管轄域および地域のさまざまな所有者によって運営されているバリデータが含まれていると理想的です。結果として、信頼できるバリデータの公正な運用が地域特有の事象によって損なわれるおそれが低減されます。 -Ripple社は、推奨される一連のバリデータを記載した[バリデータリスト](https://github.com/XRPLF/rippled/blob/develop/cfg/validators-example.txt)を公開しています。本番環境のサーバーでは、このリストを使用することを強くお勧めします。 +運用者は[exampleファイル](https://github.com/XRPLF/rippled/blob/develop/cfg/validators-example.txt)に存在するバリデータリストを使用することを強くお勧めします。 diff --git a/content/@i18n/ja/infrastructure/index.md b/content/@i18n/ja/infrastructure/index.md new file mode 100644 index 0000000000..a880fb2fbc --- /dev/null +++ b/content/@i18n/ja/infrastructure/index.md @@ -0,0 +1,9 @@ +--- +html: infrastructure.html +parent: docs.html +template: pagetype-category.html.jinja +top_nav_grouping: カテゴリ +--- +# インフラストラクチャ + +XRP Ledgerを動かすソフトウェアのインストール、設定、管理。 \ No newline at end of file diff --git a/content/infrastructure/rippled/installation/capacity-planning.ja.md b/content/@i18n/ja/infrastructure/installation/capacity-planning.md similarity index 98% rename from content/infrastructure/rippled/installation/capacity-planning.ja.md rename to content/@i18n/ja/infrastructure/installation/capacity-planning.md index 7b1c95734d..c6c48850c4 100644 --- a/content/infrastructure/rippled/installation/capacity-planning.ja.md +++ b/content/@i18n/ja/infrastructure/installation/capacity-planning.md @@ -169,7 +169,7 @@ XRP Ledgerネットワークの各サーバーは、ネットワークのすべ ##### Amazon Web Services -Amazon Web Services(AWS)は、人気のある仮想化ホスト環境です。AWSで`rippled`を実行することはできますが、RippleではElastic Block Storage(EBS)の使用はお勧めしません。Elastic Block Storageの最大IOPS数(5,000)は、非常に高額であるにもかかわらず、`rippled`の最大負荷には不十分です。 +Amazon Web Services(AWS)は、人気のある仮想化ホスト環境です。AWSで`rippled`を実行することはできますが、Elastic Block Storage(EBS)は使用しないでください。詳しくは[システム要件](system-requirements.html)をご覧ください。 AWSインスタンスストア(`ephemeral`ストレージ)では適切なパフォーマンスが提供されます。しかし、インスタンスを開始/停止するときなど、いくつかの状況でデータが失われる可能性があります。しかし、個々のXRP Ledgerサーバーは、通常、失われたレジャーの履歴を他サーバーから再取得することができるので、これは許容範囲内でしょう。設定内容は、より信頼性の高いストレージに保存する必要があります。 diff --git a/content/@i18n/ja/infrastructure/installation/index.md b/content/@i18n/ja/infrastructure/installation/index.md new file mode 100644 index 0000000000..cdc101b6cb --- /dev/null +++ b/content/@i18n/ja/infrastructure/installation/index.md @@ -0,0 +1,9 @@ +--- +html: install-rippled.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: rippledサーバーをインストールして更新します。 +--- +# rippledのインストール + +rippledサーバーをインストールして更新します。 \ No newline at end of file diff --git a/content/infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.ja.md b/content/@i18n/ja/infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md similarity index 100% rename from content/infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.ja.md rename to content/@i18n/ja/infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md diff --git a/content/infrastructure/rippled/installation/install-rippled-on-ubuntu.ja.md b/content/@i18n/ja/infrastructure/installation/install-rippled-on-ubuntu.md similarity index 100% rename from content/infrastructure/rippled/installation/install-rippled-on-ubuntu.ja.md rename to content/@i18n/ja/infrastructure/installation/install-rippled-on-ubuntu.md diff --git a/content/infrastructure/rippled/installation/rippled-1-3-migration-instructions.ja.md b/content/@i18n/ja/infrastructure/installation/rippled-1-3-migration-instructions.md similarity index 100% rename from content/infrastructure/rippled/installation/rippled-1-3-migration-instructions.ja.md rename to content/@i18n/ja/infrastructure/installation/rippled-1-3-migration-instructions.md diff --git a/content/infrastructure/rippled/installation/system-requirements.ja.md b/content/@i18n/ja/infrastructure/installation/system-requirements.md similarity index 100% rename from content/infrastructure/rippled/installation/system-requirements.ja.md rename to content/@i18n/ja/infrastructure/installation/system-requirements.md diff --git a/content/infrastructure/rippled/installation/update-rippled-automatically-on-linux.ja.md b/content/@i18n/ja/infrastructure/installation/update-rippled-automatically-on-linux.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-automatically-on-linux.ja.md rename to content/@i18n/ja/infrastructure/installation/update-rippled-automatically-on-linux.md diff --git a/content/infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.ja.md b/content/@i18n/ja/infrastructure/installation/update-rippled-manually-on-centos-rhel.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.ja.md rename to content/@i18n/ja/infrastructure/installation/update-rippled-manually-on-centos-rhel.md diff --git a/content/infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.ja.md b/content/@i18n/ja/infrastructure/installation/update-rippled-manually-on-ubuntu.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.ja.md rename to content/@i18n/ja/infrastructure/installation/update-rippled-manually-on-ubuntu.md diff --git a/content/infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.ja.md b/content/@i18n/ja/infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md similarity index 100% rename from content/infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.ja.md rename to content/@i18n/ja/infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md diff --git a/content/@i18n/ja/infrastructure/testing-and-auditing/index.md b/content/@i18n/ja/infrastructure/testing-and-auditing/index.md new file mode 100644 index 0000000000..d1af9ee5c8 --- /dev/null +++ b/content/@i18n/ja/infrastructure/testing-and-auditing/index.md @@ -0,0 +1,9 @@ +--- +html: use-stand-alone-mode.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: 新機能や実験用に、スタンドアロンモードを使用してフルネットワークで機能をテストできます。 +--- +# スタンドアロンモードでrippledをテスト + +新機能や実験用に、スタンドアロンモードを使用してフルネットワークで機能をテストできます。 \ No newline at end of file diff --git a/content/infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.ja.md b/content/@i18n/ja/infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md similarity index 100% rename from content/infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.ja.md rename to content/@i18n/ja/infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md diff --git a/content/infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.ja.md b/content/@i18n/ja/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md similarity index 88% rename from content/infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.ja.md rename to content/@i18n/ja/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md index b4c6c386fa..ff469f760d 100644 --- a/content/infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.ja.md +++ b/content/@i18n/ja/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md @@ -17,7 +17,7 @@ rippled -a --start --conf=/path/to/rippled.cfg スタンドアロンモードで`rippled`を起動時に使用できるオプションについての詳細は、[コマンドラインの使用リファレンスのスタンドアロンモードのオプション](commandline-usage.html#スタンドアロンモードのオプション)を参照してください。 -ジェネシスレジャーの[ジェネシスアドレス](accounts.html#特別なアドレス)は1,000億XRPすべてを保有しています。ジェネシスアドレスのキーは以下のように[ハードコーディング](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 +ジェネシスレジャーの[ジェネシスアドレス](addresses.html#特別なアドレス)は1,000億XRPすべてを保有しています。ジェネシスアドレスのキーは以下のように[ハードコーディング](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 **アドレス:** `rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh` diff --git a/content/@i18n/ja/infrastructure/testing-and-auditing/test-amendments.md b/content/@i18n/ja/infrastructure/testing-and-auditing/test-amendments.md new file mode 100644 index 0000000000..180d2d8aa8 --- /dev/null +++ b/content/@i18n/ja/infrastructure/testing-and-auditing/test-amendments.md @@ -0,0 +1,26 @@ +--- +html: test-amendments.html +parent: configure-rippled.html +blurb: ネットワーク上で有効になる前に、Amendmentをテストすることができます。 +labels: + - ブロックチェーン +--- +# Amendmentのテスト + + +本番ネットワークでAmendmentが完全に有効になる前に、スタンドアロンモードを使って`rippled` の動作をテストすることができます。 + +**注意:** これは開発目的の利用を想定しています。 + +機能を強制的に有効にするには、`rippled.cfg` ファイルに `[features]`節とAmendmentの短い名前を追加してください。各Amendmentにはそれぞれ行が必要です。 + + +_Example_ + +``` +[features] +MultiSign +TrustSetAuth +``` + + diff --git a/content/infrastructure/rippled/troubleshooting/diagnosing-problems.ja.md b/content/@i18n/ja/infrastructure/troubleshooting/diagnosing-problems.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/diagnosing-problems.ja.md rename to content/@i18n/ja/infrastructure/troubleshooting/diagnosing-problems.md diff --git a/content/infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.ja.md b/content/@i18n/ja/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.ja.md rename to content/@i18n/ja/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md diff --git a/content/@i18n/ja/infrastructure/troubleshooting/index.md b/content/@i18n/ja/infrastructure/troubleshooting/index.md new file mode 100644 index 0000000000..eae8d693c9 --- /dev/null +++ b/content/@i18n/ja/infrastructure/troubleshooting/index.md @@ -0,0 +1,9 @@ +--- +html: troubleshoot-the-rippled-server.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: rippledサーバーのあらゆる種類の問題をトラブルシューティングします。 +--- +# rippledのトラブルシューティング + +rippledサーバーのあらゆる種類の問題をトラブルシューティングします。 \ No newline at end of file diff --git a/content/infrastructure/rippled/troubleshooting/server-doesnt-sync.ja.md b/content/@i18n/ja/infrastructure/troubleshooting/server-doesnt-sync.md similarity index 99% rename from content/infrastructure/rippled/troubleshooting/server-doesnt-sync.ja.md rename to content/@i18n/ja/infrastructure/troubleshooting/server-doesnt-sync.md index aa81dd8239..558f87cd59 100644 --- a/content/infrastructure/rippled/troubleshooting/server-doesnt-sync.ja.md +++ b/content/@i18n/ja/infrastructure/troubleshooting/server-doesnt-sync.md @@ -11,6 +11,7 @@ labels: 以下の手順では、サポートされているプラットフォームに[`rippled`がインストール](install-rippled.html)されていることを前提としています。 + ## 通常の同期動作 ネットワークとの同期は、通常はおよそ5分から15分で完了します。その間に、サーバーは次のようなさまざまなことを行います。 @@ -23,6 +24,7 @@ labels: サーバーがこれらのタスクを行うときにネットワークに同調して対応できなかった場合は、サーバーはネットワークと同期しない状態になります。 + ## 最初のステップ: 再起動 多くの同期の問題は、サーバーを再起動することで解決できます。最初に同期が失敗した原因がどのようなものであっても、2回目では成功する場合があります。 @@ -31,6 +33,7 @@ labels: 問題が解決しない場合は、このページに記載されている他の原因を確認してください。いずれも当てはまらないと思われる場合は、[`rippled`リポジトリに問題を登録](https://github.com/XRPLF/rippled/issues)し、「Syncing issue」ラベルを追加します。 + ## 同期の問題のよくある原因 同期の問題の原因として最もよくあるのは、[システム要件](system-requirements.html)を満たしていないことです。要件を満たせない主な原因は次の3つです。 @@ -41,6 +44,7 @@ labels: 同期の問題が解消されない場合は、サーバーがシステム要件を満たしているかもう一度確認してください。サーバーの使用方法によっては、「最小」要件よりも高い「推奨」要件を満たす必要があります。「推奨」要件を満たしていても、まだ同期ができない場合は、このページの他の原因を試してみてください。 + ## バリデータリストを読み込めない デフォルトの構成では、`vl.ripple.com`から受信した推奨バリデータリストを使用します。このリストは、Rippleの暗号鍵ペアで署名されており、有効期限が組み込まれています。サーバーが何らかの理由でリストを`vl.ripple.com`からダウンロードできない場合、サーバーは信頼できるバリデータのセットを選択せず、有効として宣言できるレジャーを決定できません。([Testnetや別の並列ネットワーク](parallel-networks.html)に接続している場合、サーバーは代わりにそのネットワークの信頼できるバリデータのリストを使用します。) diff --git a/content/infrastructure/rippled/troubleshooting/server-wont-start.ja.md b/content/@i18n/ja/infrastructure/troubleshooting/server-wont-start.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/server-wont-start.ja.md rename to content/@i18n/ja/infrastructure/troubleshooting/server-wont-start.md diff --git a/content/infrastructure/rippled/troubleshooting/understanding-log-messages.ja.md b/content/@i18n/ja/infrastructure/troubleshooting/understanding-log-messages.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/understanding-log-messages.ja.md rename to content/@i18n/ja/infrastructure/troubleshooting/understanding-log-messages.md diff --git a/content/concepts/introduction/crypto-wallets.ja.md b/content/@i18n/ja/introduction/crypto-wallets.md similarity index 100% rename from content/concepts/introduction/crypto-wallets.ja.md rename to content/@i18n/ja/introduction/crypto-wallets.md diff --git a/content/@i18n/ja/introduction/index.md b/content/@i18n/ja/introduction/index.md new file mode 100644 index 0000000000..81ad8cf20a --- /dev/null +++ b/content/@i18n/ja/introduction/index.md @@ -0,0 +1,9 @@ +--- +html: introduction.html +parent: docs.html +template: pagetype-category.html.jinja +top_nav_grouping: カテゴリ +--- +# 基本 + +XRP Ledger(XRPL)の主要な機能を簡単に紹介します。これを読んでXRPLのハイレベルな理解を深め、その後、特に興味のある分野についての詳細を読むことができます。XRP Ledgerは、アカウント間のトークンのデジタルトランザクションを永続的に記録するブロックチェーンです。以下のセクションは、その文章で紹介された概念を拡張するものです。 \ No newline at end of file diff --git a/content/concepts/introduction/software-ecosystem.ja.md b/content/@i18n/ja/introduction/software-ecosystem.md similarity index 100% rename from content/concepts/introduction/software-ecosystem.ja.md rename to content/@i18n/ja/introduction/software-ecosystem.md diff --git a/content/concepts/introduction/txn-and-requests.ja.md b/content/@i18n/ja/introduction/transactions-and-requests.md similarity index 100% rename from content/concepts/introduction/txn-and-requests.ja.md rename to content/@i18n/ja/introduction/transactions-and-requests.md diff --git a/content/concepts/introduction/what-is-the-xrp-ledger.ja.md b/content/@i18n/ja/introduction/what-is-the-xrp-ledger.md similarity index 100% rename from content/concepts/introduction/what-is-the-xrp-ledger.ja.md rename to content/@i18n/ja/introduction/what-is-the-xrp-ledger.md diff --git a/content/concepts/introduction/what-is-xrp.ja.md b/content/@i18n/ja/introduction/what-is-xrp.md similarity index 100% rename from content/concepts/introduction/what-is-xrp.ja.md rename to content/@i18n/ja/introduction/what-is-xrp.md diff --git a/content/references/client-libraries.ja.md b/content/@i18n/ja/references/client-libraries.md similarity index 88% rename from content/references/client-libraries.ja.md rename to content/@i18n/ja/references/client-libraries.md index 924fd690fc..8b05118a02 100644 --- a/content/references/client-libraries.ja.md +++ b/content/@i18n/ja/references/client-libraries.md @@ -17,4 +17,3 @@ blurb: これらのライブラリを使用して、お好みのプログラミ | **Java** | `xrpl4j` | [Javaを使ってみよう](get-started-using-java.html) | [API リファレンス](https://javadoc.io/doc/org.xrpl/) | [リポジトリ](https://github.com/XRPLF/xrpl4j) | | **Ruby** | `xrbp` | | [API リファレンス](https://www.rubydoc.info/gems/xrbp) | [リポジトリ](https://github.com/DevNullProd/xrbp) | -**ヒント:** ここに掲載されていないクライアントライブラリを追加するには、[このページの変更を提案]({{target.github_forkurl}}/edit/{{target.github_branch}}/content/{{currentpage.md}})してください! diff --git a/content/@i18n/ja/references/data-api.md b/content/@i18n/ja/references/data-api.md new file mode 100644 index 0000000000..6aca6165fb --- /dev/null +++ b/content/@i18n/ja/references/data-api.md @@ -0,0 +1,18 @@ +--- +html: data-api.html +parent: references.html +blurb: (非推奨)XRP Ledger分析と履歴データに対するRESTfulインターフェイスです。 +status: removed +nav_omit: true +--- +# Ripple Data API v2 + +**警告:** Ripple Data API v2は非推奨となりました。代わりに[HTTP / WebSocket API](http-websocket-apis.html)を使って下さい。 + +古いData APIについては[rippled-historical-database リポジトリ](https://github.com/ripple/rippled-historical-database)をご覧ください. + +## Alternatives + +アカウト残高や取引履歴のリクエストなど、ほとんどの一般的な操作では、[WebSocket接続](get-started-using-http-websocket-apis.html#websocket-api)または[JSON-RPC(HTTP POST)](get-started-using-http-websocket-apis.html#json-rpc)を使用して、セルフホストまたは[公開XRP Ledgerサーバー](public-servers.html)にリクエストすることとができます。 + +詳細については、[HTTP / WebSocket APIsの使用を開始する](get-started-using-http-websocket-apis.html)ページをご覧ください。 diff --git a/content/references/http-websocket-apis/admin-api-methods/admin-api-methods.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/index.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/admin-api-methods.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/index.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md new file mode 100644 index 0000000000..8cad3d1f8c --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md @@ -0,0 +1,8 @@ +--- +html: key-generation-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# キー生成メソッド + +以下のメソッドを使用してキーを生成および管理することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.md diff --git a/content/references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md new file mode 100644 index 0000000000..5608f5a77d --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md @@ -0,0 +1,8 @@ +--- +html: logging-and-data-management-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# ログとデータの管理メソッド + +以下のメソッドを使用して、ログレベルや台帳などのデータを管理することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.md diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.md diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md new file mode 100644 index 0000000000..f3be0e8c16 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md @@ -0,0 +1,8 @@ +--- +html: peer-management-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# ピア管理メソッド + +以下のメソッドを使用して、サーバーのピアツーピア接続を管理することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.md diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.md diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.md diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md new file mode 100644 index 0000000000..eaf7371831 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md @@ -0,0 +1,8 @@ +--- +html: server-control-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# サーバ操作メソッド + +以下のメソッドを使用して、rippledサーバーを管理することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.md diff --git a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/stop.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/stop.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/server-control-methods/stop.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/stop.md diff --git a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/index.md new file mode 100644 index 0000000000..0bd905d282 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/index.md @@ -0,0 +1,8 @@ +--- +html: signing-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# 署名メソッド + +以下のメソッドを使用して、トランザクションを扱うことができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/signing-methods/sign.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/signing-methods/sign.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign.md diff --git a/content/references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.md diff --git a/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md new file mode 100644 index 0000000000..3a95d2c743 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md @@ -0,0 +1,8 @@ +--- +html: status-and-debugging-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# ステータスとデバッグのメソッド + +以下のメソッドを使用して、ネットワークとサーバーのステータスを確認することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.md diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.ja.md b/content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.ja.md rename to content/@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.md diff --git a/content/@i18n/ja/references/http-websocket-apis/api-conventions/ctid.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/ctid.md new file mode 100644 index 0000000000..1a85a19c04 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/api-conventions/ctid.md @@ -0,0 +1,32 @@ +--- +html: ctid.html +parent: api-conventions.html +blurb: CTID(Compact Transaction Identifier)は、検証済みトランザクションをチェーン全体で一意に識別する短い文字列です。 +labels: + - 開発 +--- +# トランザクション軽量識別子 + +CTID(トランザクション軽量識別子 / Compact Transaction Identifier)は、XRP Ledgerのメインネットを含む、あらゆる[ネットワーク](parallel-networks.html)で利用可能な、検証済みトランザクションの一意な識別子です。 + +CTIDとトランザクションの[識別ハッシュ](transactions.html#identifying-transactions)の違いは以下の通りです: + +- CTIDは、ネットワークID、レジャーインデックス、レジャー内の位置に基づいて検証されたトランザクションを識別します。トランザクションがどのネットワークで検証されたかを特定するため、サイドチェーンへの接続など、複数のネットワークとやりとりする状況で使用できます。CTIDは64ビットで、通常は`C`で始まる16進数の大文字で、例えば`C005523E000000`のように記述します。 +- トランザクションの識別ハッシュは、そのトランザクションがどのチェーンで検証されたかに関係なく、その内容に基づいて署名されたトランザクションを識別します。これは暗号ハッシュであるため、トランザクションの内容が完全であることを証明するために使用することもできます。トランザクションハッシュは256ビットで、通常64文字の16進数で記述され、例えば`E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7`となります。 + +**注意:** 未検証のトランザクションにCTIDを使わないでください。トランザクションが最初に適用されたときと、コンセンサスプロセスによって検証されたときとで、トランザクションの正規順序が変わる可能性があります。 + +## 構造 + +CTIDは以下の要素を含みます(ビッグエンディアン順)。 + +1. 4ビット: CTIDであることを示す16進数の頭文字`C` +2. 28ビット: トランザクションが検証されたレジャーのインデックス +3. 16ビット: トランザクションのインデックス。これは[トランザクションのメタデータ](transaction-metadata.html)の`TransactionIndex`フィールドとして提供されます +4. 16ビット: トランザクションを検証したネットワークの[ネットワークID](transaction-common-fields.html#networkidフィールド) + +**注記:** レジャーインデックスは通常32ビットの符号なし整数として保存され、新しいレジャーが作成されるたびに1ずつ増加します。ネットワークのレジャーインデックスが268,435,455より大きい場合、28ビットに収まらないので、必要に応じて先頭の`C`を`D`、`E`、`F`にインクリメントする必要があります。これは少なくとも2043年までは必要ないと思われます。 + +## 関連項目 + +サンプルコードや背景などの詳細については、[XLS-37d Standard](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0037d-concise-transaction-identifier-ctid)をご覧ください。 diff --git a/content/references/http-websocket-apis/api-conventions/error-formatting.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/error-formatting.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/error-formatting.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/error-formatting.md diff --git a/content/references/http-websocket-apis/api-conventions/api-conventions.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/index.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/api-conventions.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/index.md diff --git a/content/references/http-websocket-apis/api-conventions/markers-and-pagination.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/markers-and-pagination.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/markers-and-pagination.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/markers-and-pagination.md diff --git a/content/references/http-websocket-apis/api-conventions/request-formatting.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/request-formatting.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/request-formatting.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/request-formatting.md diff --git a/content/references/http-websocket-apis/api-conventions/response-formatting.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/response-formatting.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/response-formatting.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/response-formatting.md diff --git a/content/references/http-websocket-apis/api-conventions/rippled-server-states.ja.md b/content/@i18n/ja/references/http-websocket-apis/api-conventions/rippled-server-states.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/rippled-server-states.ja.md rename to content/@i18n/ja/references/http-websocket-apis/api-conventions/rippled-server-states.md diff --git a/content/@i18n/ja/references/http-websocket-apis/index.md b/content/@i18n/ja/references/http-websocket-apis/index.md new file mode 100644 index 0000000000..85f3d8d7a7 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/index.md @@ -0,0 +1,8 @@ +--- +html: http-websocket-apis.html +parent: references.html +template: pagetype-category.html.jinja +--- +# HTTP / WebSocket API リファレンス + +XRP Ledgerを管理するコアのピアツーピアサーバーであるrippledと直接通信します。 \ No newline at end of file diff --git a/content/@i18n/ja/references/http-websocket-apis/peer-port-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/peer-port-methods/index.md new file mode 100644 index 0000000000..03b7534fda --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/peer-port-methods/index.md @@ -0,0 +1,8 @@ +--- +html: peer-port-methods.html +parent: http-websocket-apis.html +template: pagetype-category.html.jinja +--- +# ピアポートメソッド + +ネットワークトポロジーやステータスメトリクスを共有するための特別なAPIメソッドです。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_channels.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_channels.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_channels.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_channels.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_currencies.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_currencies.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_currencies.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_currencies.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_info.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_info.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_info.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_info.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_lines.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_lines.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_lines.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_lines.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_nfts.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_nfts.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_nfts.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_nfts.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_objects.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_objects.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_objects.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_objects.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_offers.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_offers.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_offers.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_offers.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/index.md new file mode 100644 index 0000000000..f41b66f329 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/index.md @@ -0,0 +1,8 @@ +--- +html: account-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Accountメソッド + +XRP Ledgerのアカウントとは、XRPの保有者とトランザクションの送信者を意味します。以下のメソッドを使用して、アカウント情報を処理することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/noripple_check.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/noripple_check.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/account-methods/noripple_check.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/noripple_check.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/clio-server/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/clio-server/index.md new file mode 100644 index 0000000000..deca916dda --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/clio-server/index.md @@ -0,0 +1,8 @@ +--- +html: clio-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Clio Serverメソッド + +以下のメソッドを使用して、ClioサーバーのAPIから情報を取得することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/public-api-methods.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/index.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/public-api-methods.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/index.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/index.md new file mode 100644 index 0000000000..8770ce11bc --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/index.md @@ -0,0 +1,8 @@ +--- +html: ledger-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Ledgerメソッド + +レジャーバージョンには、ヘッダー、トランザクションツリー、状態ツリーが含まれ、さらにその中にアカウント設定、トラストライン、残高、トランザクション、その他のデータが含まれます。以下のメソッドを使用して、レジャー情報を取得することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md similarity index 99% rename from content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md index 717f18e6d3..1954e1dd85 100644 --- a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.ja.md +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md @@ -172,7 +172,7 @@ rippled ledger current | `ledger.transactions` | 配列 | (要求されていない場合は省略)このレジャーバージョンで適用されたトランザクション。デフォルトでは、メンバーはトランザクションの識別用[ハッシュ][]文字列です。要求で`expand`がtrueとして指定されている場合は、メンバーはJSONフォーマットまたはバイナリフォーマットでのトランザクションの完全な表現です。フォーマットは、要求で`binary`がtrueとして指定されていたかどうかに応じて決まります。 | | `ledger_hash` | 文字列 | レジャー全体の一意の識別用ハッシュ。 | | `ledger_index` | 数値 | このレジャーの[レジャーインデックス][]。 | -| `queue_data` | 配列 | (`queue`パラメーターで要求されている場合を除いて省略)キューに入れられたトランザクションをキューと同じ順序で記述するオブジェクトの配列。要求で`expand`がtrueに指定されている場合は、メンバーにはJSONフォーマットまたはバイナリフォーマットでのトランザクションの完全な表現が含まれています。フォーマットは、要求で`binary`がtrueとして指定されていたかどうかによって決まります。[FeeEscalation Amendment][]が必要です。[新規: rippled 0.70.0][] | +| `queue_data` | 配列 | (`queue`パラメーターで要求されている場合を除いて省略)キューに入れられたトランザクションをキューと同じ順序で記述するオブジェクトの配列。要求で`expand`がtrueに指定されている場合は、メンバーにはJSONフォーマットまたはバイナリフォーマットでのトランザクションの完全な表現が含まれています。フォーマットは、要求で`binary`がtrueとして指定されていたかどうかによって決まります。[FeeEscalation Amendment][]により追加されました。[新規: rippled 0.70.0][] | 以下のフィールドは廃止予定であり、今後予告なしに削除される可能性があります。`accepted`、`hash`(代わりに`ledger_hash`を使用)、`seqNum`(代わりに`ledger_index`を使用)、`totalCoins`(代わりに`total_coins`を使用)。 diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.md diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.md diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.md diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.md diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md similarity index 78% rename from content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md index a85e6b34cd..a52ec62e96 100644 --- a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.ja.md +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md @@ -1,7 +1,7 @@ --- html: amm_info.html parent: path-and-order-book-methods.html -blurb: Get info about an Automted Market Maker (AMM) instance. +blurb: 自動マーケットメーカ(AMM)の情報を取得する。 status: not_enabled labels: - 分散型取引所 @@ -9,11 +9,11 @@ labels: - AMM --- # amm_info -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AMMInfo.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AMMInfo.cpp "Source") -`{{currentpage.name}}` メソッドは、自動マーケットメーカー(AMM)インスタンスに関する情報を取得します。 +`{{currentpage.name}}`メソッドは、自動マーケットメーカー(AMM)インスタンスに関する情報を取得します。 -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ ### リクエストのフォーマット @@ -62,15 +62,17 @@ _([AMM amendment][] :not_enabled:が必要。)_ リクエストには以下のパラメーターが含まれます。 -| `フィールド` | 型 | 説明 | -|:-----------|:-----------------------|:-----------------------------------| -| `asset` | オブジェクト または 文字列 | [通貨額][Currency Amount]のように、`currency`と`issuer`フィールドを持つオブジェクトとして(XRPの場合は`issuer`を省略)、検索するAMMの資産の一つを指定します。XRPの場合は、オブジェクトではなく文字列`XRP`として指定することができます。 | -| `asset2` | オブジェクト または 文字列 | AMMの資産のもう一方を、`currency`と`issuer`フィールド(XRPの場合は`issuer`を省略)を持つオブジェクトとして、[通貨額][Currency Amount]のように指定することが可能です。 | +| `フィールド` | 型 | 必須? | 説明 | +|:-----------|:-----------------------|:------|:-----------------------------------| +| `account` | 文字列 - [アドレス][] | いいえ | この流動性プロバイダーが保有するLPトークンのみを表示します。 | +| `amm_account` | 文字列 - [アドレス][] | いいえ | AMMの特別なAccountRootのアドレス。(これはAMMのLPトークンの`issuer`です)。 | +| `asset` | オブジェクト または 文字列 | いいえ | [通貨額][Currency Amount]のように、`currency`と`issuer`フィールドを持つオブジェクトとして(XRPの場合は`issuer`を省略)、検索するAMMの資産の一つを指定します。XRPの場合は、オブジェクトではなく文字列`XRP`として指定することもできます。 | +| `asset2` | オブジェクト または 文字列 | いいえ | AMMの資産のもう一方を、`currency`と`issuer`フィールド(XRPの場合は`issuer`を省略)を持つオブジェクトとして、[通貨額][Currency Amount]のように指定することが可能です。 | +`amm_account`、または`asset`と`asset2`の両方を指定する必要があります。 ### レスポンスのフォーマット - 処理が成功したレスポンスの例: @@ -81,7 +83,7 @@ _([AMM amendment][] :not_enabled:が必要。)_ { "result": { "amm": { - "amm_account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", + "account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", "amount": "296890496", "amount2": { "currency": "TST", @@ -138,7 +140,7 @@ _([AMM amendment][] :not_enabled:が必要。)_ { "result": { "amm": { - "amm_account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", + "account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", "amount": "296890496", "amount2": { "currency": "TST", @@ -196,12 +198,12 @@ _([AMM amendment][] :not_enabled:が必要。)_ | `ledger_current_index` | [レジャーインデックス][] | _(`ledger_index`の指定がある場合は省略)_ この情報を取得する際に使用された、現在の進行中の台帳の[レジャーインデックス][]。 | | `ledger_hash` | [ハッシュ][] | _(`ledger_current_index`の指定がある場合は省略)_ この情報を取得する際に使用された台帳のバージョンの識別ハッシュ。 | | `ledger_index` | [レジャーインデックス][] | _(`ledger_current_index`の指定がある場合は省略_ この情報を取得する際に使用した台帳のバージョンの[レジャーインデックス][]。 | -| `validated` | 真偽値 | もし`true`なら、このリクエストに使用された台帳は検証済みで、これらの結果は最終的なものです。もし省略されるか `false` に設定されると、データは未確定で変更される可能性があります。 | +| `validated` | 真偽値 | もし`true`なら、このリクエストに使用された台帳は検証済みで、これらの結果は最終的なものです。もし省略されるか`false`に設定されると、データは未確定で変更される可能性があります。 | ### AMM詳細オブジェクト -フィールド `amm` は、台帳上の自動マーケットメーカー(AMM)の現在の状態を記述するオブジェクトであり、以下のフィールドを含みます。 +`amm`フィールドは、自動マーケットメーカー(AMM)の現在の状態を記述するオブジェクトであり、以下のフィールドを含みます。 | フィールド | 型 | 説明 | |-----------------|------------|-------------| @@ -211,21 +213,21 @@ _([AMM amendment][] :not_enabled:が必要。)_ | `asset_frozen` | 真偽値 | _(XRPの場合、省略)_ `true`の場合、`amount`の通貨は現在[凍結](freezes.html)されています。 | | `asset2_frozen` | 真偽値 | _(XRPの場合、省略)_ `true`の場合、`amount2`の通貨は現在[凍結](freezes.html)されています。 | | `auction_slot` | オブジェクト | _(省略される場合があります)_ 存在する場合、現在のオークションスロットの所有者を記述した[オークションスロットオブジェクト](#オークションスロットオブジェクト)です。 | -| `lp_token` | [通貨額][] | このAMMのLPトークンの発行残高の合計。 | +| `lp_token` | [通貨額][] | このAMMのLPトークンの発行残高の合計。リクエスト時に`account`フィールドで流動性プロバイダを指定した場合、その流動性プロバイダが保有するこのAMMのLPトークンの量です。 | | `trading_fee` | 数値 | AMMの現在の取引手数料。単位は1/100,000で、1は0.001%の手数料に相当します。 | | `vote_slots` | 配列 | _(省略される場合があります)_ AMMの取引手数料に対する現在の投票数。[投票スロットオブジェクト](#投票スロットオブジェクト)として表示されます。 | ### オークションスロットオブジェクト -`AMM` オブジェクトの `auction_slot` フィールドは、AMMの現在のオークションスロット保持者を表し、以下のフィールドを含みます。 +`AMM`オブジェクトの`auction_slot`フィールドは、AMMの現在のオークションスロット保持者を表し、以下のフィールドを含みます。 | フィールド | 型 | 説明 | |------------------|-----------|-------------| | `account` | 文字列 | オークションスロットを所有するアカウントの[アドレス][]です。 | -| `auth_accounts` | 配列 | オークションスロットの所有者が、取引手数料の割引の対象として指定した追加アカウントのリスト。この配列の各メンバーは、1つのフィールド `account` を持つオブジェクトで、指定したアカウントのアドレスが含まれています。 | +| `auth_accounts` | 配列 | オークションスロットの所有者が、取引手数料の割引の対象として指定した追加アカウントのリスト。この配列の各メンバーは、1つのフィールド`account`を持つオブジェクトで、指定したアカウントのアドレスが含まれています。 | | `discounted_fee` | 数値 | このAMMに対して取引を行う際に、オークションスロットの保有者、および対象となるアカウントに適用される割引後の取引手数料です。これは常に0です。 | -| `expiration` | 文字列 | このオークションスロットが期限切れとなるISO8601 UTCタイムスタンプ。期限切れになると、オークションスロットは適用されません (ただし、別のトランザクションで置き換えられるかクリーンアップされるまで、データは台帳に残ります)。 | +| `expiration` | 文字列 | このオークションスロットが期限切れとなるISO8601のUTCタイムスタンプ。期限切れになると、オークションスロットは適用されません (ただし、別のトランザクションで置き換えられるかクリーンアップされるまで、データは台帳に残ります)。 | | `price` | [通貨額][] | オークションスロット所有者がオークションスロットを獲得するために支払った金額(LPトークン単位)です。これは、現在のスロット所有者を競り落とすための価格に影響します。 | | `time_interval` | 数値 | このオークションスロットが現在入っている72分の時間間隔を0から19までで指定します。オークションスロットは24時間後(72分間隔で20回)に失効し、現在の保有者を競り落とすためのコストと、誰かが競り落とした場合に現在の保有者が払い戻される金額に影響します。 | diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.md diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md new file mode 100644 index 0000000000..2503b18bda --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md @@ -0,0 +1,8 @@ +--- +html: path-and-order-book-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# PathおよびOrderBookのメソッド + +パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、複数通貨間の支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.md diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.md diff --git a/content/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.md diff --git a/content/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md new file mode 100644 index 0000000000..59aaaaf43e --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md @@ -0,0 +1,8 @@ +--- +html: payment-channel-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Payment Channelメソッド + +Payment Channelは、2者間で繰り返される一方向の支払いや一時的な与信を可能にするためのツールです。これらのメソッドを使用して、Payment Channelを使用することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/server-info-methods/fee.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/fee.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/server-info-methods/fee.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/fee.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/index.md new file mode 100644 index 0000000000..a44b18a9a7 --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/index.md @@ -0,0 +1,8 @@ +--- +html: server-info-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Server Infoメソッド + +以下のメソッドを使用して、rippledサーバーの現在の状態についての情報を取得することができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_info.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_info.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/server-info-methods/server_info.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_info.md diff --git a/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/index.md new file mode 100644 index 0000000000..0f3ac78c1e --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/index.md @@ -0,0 +1,8 @@ +--- +html: subscription-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Subscriptionメソッド + +以下のメソッドを使用して、さまざまなイベントが発生したときに更新情報をサーバーからクライアントにプッシュできるようになるため、即座に情報を取得することができます。WebSocket APIのみ対応しています。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md diff --git a/content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/index.md new file mode 100644 index 0000000000..27dd8f377b --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/index.md @@ -0,0 +1,8 @@ +--- +html: transaction-methods.html # watch for clashes w/ this filename +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Transactionメソッド + +トランザクションだけが、XRP Ledgerの共有されている状態を変更できます。XRP Ledgerに対するすべてのビジネスはトランザクションの形態をとります。以下のメソッドを使用して、トランザクションを処理します。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/submit.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/transaction-methods/submit.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit.md diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.md diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.md diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.md diff --git a/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/index.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/index.md new file mode 100644 index 0000000000..456fb23f5e --- /dev/null +++ b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/index.md @@ -0,0 +1,8 @@ +--- +html: utility-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# ユーティリティメソッド + +以下のメソッドを使用して、Pingや乱数生成などの便利な処理を行うことができます。 \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/utility-methods/json.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/json.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/utility-methods/json.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/json.md diff --git a/content/references/http-websocket-apis/public-api-methods/utility-methods/ping.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/ping.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/utility-methods/ping.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/ping.md diff --git a/content/references/http-websocket-apis/public-api-methods/utility-methods/random.ja.md b/content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/random.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/utility-methods/random.ja.md rename to content/@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/random.md diff --git a/content/references/protocol-reference/serialization.ja.md b/content/@i18n/ja/references/protocol/binary-format.md similarity index 95% rename from content/references/protocol-reference/serialization.ja.md rename to content/@i18n/ja/references/protocol/binary-format.md index 14c33f46ed..2c9dac4d1a 100644 --- a/content/references/protocol-reference/serialization.ja.md +++ b/content/@i18n/ja/references/protocol/binary-format.md @@ -13,7 +13,7 @@ curated_anchors: - name: タイプリスト anchor: "#タイプリスト" --- -# シリアル化フォーマット +# バイナリフォーマット [[ソース]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp#L696-L718 "Source") このページでは、XRP Ledgerのトランザクションとその他のデータの正規バイナリフォーマットについて説明します。このバイナリフォーマットは、トランザクションの内容のデジタル署名を作成および検証するために必要であり、[サーバー間のピアツーピア通信](peer-protocol.html)を含む他の用途にも使用されます。通常、[`rippled` API](http-websocket-apis.html)は、JSONを使用してクライアントアプリケーションと通信します。ただしJSONは、同じデータをさまざまな同等の方法で表現できるため、デジタル署名を付与するトランザクションをシリアル化するのに適したフォーマットではありません。 @@ -177,7 +177,7 @@ curated_anchors: | タイプ名 | タイプコード | ビット長 | [長さプレフィクスを付加する]? | 説明 | |:--------------|:----------|:-----------|:-------------------|----------------| | [AccountID][] | 8 | 160 | はい | [アカウント](accounts.html)の一意のID。 | -| [Amount][] | 6 | 64または384 | いいえ | XRPまたは発行済み通貨の額。フィールドの長さは、XRPの場合は64ビット、発行済み通貨の場合は384ビット(64+160+160)です。 | +| [Amount][] | 6 | 64または384 | いいえ | XRPまたはトークンの金額。フィールドの長さは、XRPの場合は64ビット、トークンの場合は384ビット(64+160+160)です。 | | [Blob][] | 7 | 可変 | はい | 任意のバイナリデータ。このようなフィールドの中で重要なフィールドとして、`TxnSignature`(トランザクションを承認する署名)があります。 | | [Hash128][] | 4 | 128 | いいえ | 128ビットの任意のバイナリ値。該当する唯一のフィールドは`EmailHash`です。これは、[Gravatar](https://www.gravatar.com/)を取得する目的でアカウント所有者のメールのMD-5ハッシュを保管するフィールドです。 | | [Hash160][] | 17 | 160 | いいえ | 160ビットの任意のバイナリ値。これにより通貨コードまたはイシュアーが定義されます。 | @@ -208,7 +208,7 @@ curated_anchors: ### AccountIDフィールド [AccountID]: #accountidフィールド -このタイプのフィールドには、XRP Ledger[アカウント](accounts.html)の160ビットのIDが含まれています。JSONではこれらのフィールドは[base58][] XRP Ledger「アドレス」および追加のチェックサムデータとして表示されます。このため、スペルミスが有効なアドレスとなることがありません。(このエンコードは「Base58Check」とも呼ばれ、誤ったアドレスへの送金を防止します。)これらのフィールドのバイナリフォーマットにはチェックサムデータは含まれておらず、また[アドレスのbase58エンコード](accounts.html#アドレスのエンコード)で使用される`0x00`「タイププレフィクス」も含まれていません。(ただし、バイナリフォーマットは主に署名済みトランザクションに使用されるため、署名済みトランザクションを転記する際にスペルミスなどのエラーが発生すると署名が無効となり、送金できなくなります。) +このタイプのフィールドには、XRP Ledger[アカウント](accounts.html)の160ビットのIDが含まれています。JSONではこれらのフィールドは[base58][] XRP Ledger「アドレス」および追加のチェックサムデータとして表示されます。このため、スペルミスが有効なアドレスとなることがありません。(このエンコードは「Base58Check」とも呼ばれ、誤ったアドレスへの送金を防止します。)これらのフィールドのバイナリフォーマットにはチェックサムデータは含まれておらず、また[アドレスのbase58エンコード](addresses.html#アドレスのエンコード)で使用される`0x00`「タイププレフィクス」も含まれていません。(ただし、バイナリフォーマットは主に署名済みトランザクションに使用されるため、署名済みトランザクションを転記する際にスペルミスなどのエラーが発生すると署名が無効となり、送金できなくなります。) スタンドアロンフィールドとして表示されるAccountID(`Account`や`Destination`など)の長さは固定長の160ビットですが、[長さプレフィクスが付加](#長さプレフィクスを付加する)されます。その結果、これらのフィールドの長さインディケーターは常に`0x14`バイトになります。特殊フィールドの子として示されるAccountID([Amount `issuer`][Amount]、[PathSet `account`][PathSet]など)では長さプレフィクスは付加 _されません_ 。 @@ -217,25 +217,25 @@ curated_anchors: [Amount]: #amountフィールド -「Amount」タイプは、通貨(XRPまたは発行済み通貨)の額を表す特殊なフィールドタイプです。このタイプは2つのサブタイプで構成されます。 +「Amount」タイプは、通貨(XRPまたはトークン)の額を表す特殊なフィールドタイプです。このタイプは2つのサブタイプで構成されます。 - **XRP** XRPは64ビット符号なし整数(ビッグエンディアンオーダー)としてシリアル化されます。ただし、XRPであることを示すため最上位ビットが常に0であり、プラスの値であることを示す最上位から2番目のビットは`1`となります。XRPの最大額(1017 drop)には57ビットが必要であるため、XRPのシリアル化フォーマットを計算するには、標準の64ビット符号なし整数をとり、`0x4000000000000000`のビットOR演算を行います。 -- **発行済み通貨** +- **トークン** - 発行済み通貨は以下の3つのセグメントで構成され、セグメントの順序は以下のとおりです。 +トークンは以下の3つのセグメントで構成され、セグメントの順序は以下のとおりです。 - 1. [内部通貨フォーマット](currency-formats.html#発行済み通貨の計算)の額を示す64ビット。1番目のビットは、これがXRPではないことを示す`1`です。 + 1. [内部通貨フォーマット](currency-formats.html#トークンの計算)の額を示す64ビット。1番目のビットは、これがXRPではないことを示す`1`です。 2. [通貨コード](currency-formats.html#通貨コード)を示す160ビット。標準APIでは、[標準通貨コードフォーマット](currency-formats.html#標準通貨コード)を使用して「USD」などの3文字のコードが160ビットのコードに変換されますが、160ビットのカスタムコードも使用できます。 - 3. イシュアーのアカウントIDを示す160ビット。(関連項目: [アカウントアドレスエンコード](accounts.html#アドレスのエンコード)) + 3. イシュアーのアカウントIDを示す160ビット。(関連項目: [アカウントアドレスエンコード](addresses.html#アドレスのエンコード) -1番目のビットに基づいて2つのサブタイプのいずれに該当するかを確認できます。`0`の場合はXRP、`1`の場合は発行済み通貨です。 +1番目のビットに基づいて2つのサブタイプのいずれに該当するかを確認できます。`0`の場合はXRP、`1`の場合はトークンです。 -以下の図に、XRPの額と発行済み通貨の額のシリアル化フォーマットを示します。 +以下の図に、XRPの額とトークン額のシリアル化フォーマットを示します。 -![「非XRP」ビット、符号ビット、および62ビットの精度で構成されるXRPの額。「非XRP」ビット、符号ビット、指数(8ビット)、仮数(54ビット)、通貨コード(160ビット)、イシュアー(160ビット)で構成される発行済み通貨の額。](img/serialization-amount.ja.png) +![「非XRP」ビット、符号ビット、および62ビットの精度で構成されるXRPの額。「非XRP」ビット、符号ビット、指数(8ビット)、仮数(54ビット)、通貨コード(160ビット)、イシュアー(160ビット)で構成されるトークンの額。](img/serialization-amount.ja.png) ### 配列フィールド diff --git a/content/references/protocol-reference/data-types/base58-encodings.ja.md b/content/@i18n/ja/references/protocol/data-types/base58-encodings.md similarity index 76% rename from content/references/protocol-reference/data-types/base58-encodings.ja.md rename to content/@i18n/ja/references/protocol/data-types/base58-encodings.md index b5dedfa5cf..0b9f53f395 100644 --- a/content/references/protocol-reference/data-types/base58-encodings.ja.md +++ b/content/@i18n/ja/references/protocol/data-types/base58-encodings.md @@ -5,7 +5,7 @@ blurb: 暗号鍵と関連データをbase58形式で表すフォーマットで --- # base58エンコード -`rippled` APIでは、チェックサムを含む**base58**エンコード(「Base58Check」とも呼ばれます)を使用して[アカウントアドレス](accounts.html#アドレス)や暗号鍵に関連するその他のタイプの値が表現されることがよくあります。このエンコードは、[Bitcoinのアドレスに使用されているエンコード](https://en.bitcoin.it/wiki/Base58Check_encoding)と同じですが、XRP Ledgerでは以下のディクショナリが使用される点が異なります。`rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`。 +`rippled` APIでは、チェックサムを含む**base58**エンコード(「Base58Check」とも呼ばれます)を使用して[アカウントアドレス](addresses.html)や暗号鍵に関連するその他のタイプの値が表現されることがよくあります。このエンコードは、[Bitcoinのアドレスに使用されているエンコード](https://en.bitcoin.it/wiki/Base58Check_encoding)と同じですが、XRP Ledgerでは以下のディクショナリが使用される点が異なります。`rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`。 XRP Ledgerにより、さまざまなタイプの値をエンコードする前に、データタイプを区別する固有の8ビット数値が値の前に付加されます。XRP Ledgerのbase58ディクショナリの文字配列と組み合わされた、さまざまなタイプのエンコード値のbase58表現は、タイプごとに固有の文字で始まります。 @@ -24,7 +24,7 @@ XRP Ledgerにより、さまざまなタイプの値をエンコードする前 ## 関連項目 -- [アドレスのエンコード](accounts.html#アドレスのエンコード) - アドレスのエンコードについての詳細な情報 +- [アドレスのエンコード](addresses.html#アドレスのエンコード) - アドレスのエンコードについての詳細な情報 - [暗号鍵](cryptographic-keys.html) - XRP Ledgerの暗号鍵のタイプとその使用法 - [wallet_proposeリファレンス][wallet_proposeメソッド] - アカウントキーを生成するためのAPIメソッド - [validation_createリファレンス][validation_createメソッド] - バリデータキーを生成するためのAPIメソッド diff --git a/content/references/protocol-reference/data-types/basic-data-types.ja.md b/content/@i18n/ja/references/protocol/data-types/basic-data-types.md similarity index 76% rename from content/references/protocol-reference/data-types/basic-data-types.ja.md rename to content/@i18n/ja/references/protocol/data-types/basic-data-types.md index 544eae4e58..31b1e7bf3e 100644 --- a/content/references/protocol-reference/data-types/basic-data-types.ja.md +++ b/content/@i18n/ja/references/protocol/data-types/basic-data-types.md @@ -33,20 +33,20 @@ blurb: さまざまなタイプのオブジェクトがそれぞれ異なる方 ある種のハッシュは、APIの要求と応答に使用されます。またある種のデータに署名するときの最初のステップで計算されるだけのものや、より高度なハッシュを計算するためのものもあります。XRP Ledgerで使用されるすべての4バイトのハッシュプレフィクスは以下の表の通りです。 -| オブジェクトタイプ | APIフィールド | ハッシュプレフィクス(16進数) | ハッシュプレフィクス(テキスト) | -|:--------------------------------------|:-------------------------------------|:------------------|:--| -| コンセンサスの提案 | なし | `0x50525000` | `PRP\0` | -| レジャーバージョン | `ledger_hash` | `0x4C575200` | `LWR\0` | -| レジャー状態データ | `account_state` ([レジャーヘッダー][]内) | `0x4D4C4E00` | `MLN\0` | -| レジャーデータ内部ノード | なし | `0x4D494E00` | `MIN\0` | -| レジャーデータ内部ノード([SHAMapv2][]) | なし | `0x494E5200` | `INR\0` | -| Payment Channelのクレーム | なし | `0x434C4D00` | `CLM\0` | -| 署名済みのトランザクション | トランザクションの`hash` | `0x54584E00` | `TXN\0` | -| メタデータを持つトランザクション | なし | `0x534E4400` | `SND\0` | -| 未署名のトランザクション(シングル署名) | なし | `0x53545800` | `STX\0` | -| 未署名のトランザクション(マルチシグ) | なし | `0x534D5400` | `SMT\0` | -| 検証の投票 | なし | `0x56414C00` | `VAL\0` | -| バリデータサブキー認証(「バリデータマニフェスト」) | なし | `0x4D414E00` | `MAN\0` | +| オブジェクトタイプ | APIフィールド | ハッシュプレフィクス(16進数) | ハッシュプレフィクス(テキスト) | +|:--------------------------------------------|:---------------------------------------|:--------------------------|:--| +| コンセンサスの提案 | なし | `0x50525000` | `PRP\0` | +| レジャーバージョン | `ledger_hash` | `0x4C575200` | `LWR\0` | +| レジャー状態データ | `account_state` ([レジャーヘッダー][]内) | `0x4D4C4E00` | `MLN\0` | +| レジャーデータ内部ノード | なし | `0x4D494E00` | `MIN\0` | +| レジャーデータ内部ノード([SHAMapv2][]) | なし | `0x494E5200` | `INR\0` | +| Payment Channelのクレーム | なし | `0x434C4D00` | `CLM\0` | +| 署名済みのトランザクション | トランザクションの`hash` | `0x54584E00` | `TXN\0` | +| メタデータを持つトランザクション | なし | `0x534E4400` | `SND\0` | +| 未署名のトランザクション(シングル署名) | なし | `0x53545800` | `STX\0` | +| 未署名のトランザクション(マルチシグ) | なし | `0x534D5400` | `SMT\0` | +| 検証の投票 | なし | `0x56414C00` | `VAL\0` | +| バリデータサブキー認証(「バリデータマニフェスト」) | なし | `0x4D414E00` | `MAN\0` | [レジャーヘッダー]: ledger-header.html [SHAMapv2]: known-amendments.html#shamapv2 @@ -85,22 +85,6 @@ APIメソッドの多くは、レジャーのインスタンスを指定する **注記:** レジャーを指定する際に上記のデフォルトの動作に頼らないでください。変更される場合があります。可能であれば、常に要求にてレジャーバージョンを指定してください。 - -## 通貨 - -XRP Ledgerには2種類の通貨があります。XRPとその他のあらゆる通貨です。この2つには多くの相違点があります。 - -| `XRP` | 発行済み通貨 | -|:----------------------------------------------------------------|:-----------| -| 発行者なし | 必ずXRP Ledgerアカウントが発行 | -| 文字列として指定 | オブジェクトとして指定 | -| [アカウント](accountroot.html)内で追跡 | [トラストライン](ripplestate.html)内で追跡 | -| 作成は一切不可、消却のみ可能 | 自由に発行または清算可能 | -| 最大値: `100000000000`(`1e11`) | 最大値: `9999999999999999e80` | -| [「drop」](#xrp)(0.000001 XRP)に近い精度 | 10進15桁の精度で非ゼロの最少絶対値は `1000000000000000e-96` | - -**注意:** XRP Ledgerでは、通常の浮動小数点数とは異なる精度の小数点計算を使用するため、通貨額は常に文字列として表されます。 - ### 通貨額の指定 一部のAPIメソッドでは、通貨額を指定する必要があります。取扱通貨がネットワーク固有のXRP通貨であるかその他の通貨単位(_イシュアンス_)であるかによって、指定方法が大きく異なります。 diff --git a/content/references/protocol-reference/data-types/currency-formats.ja.md b/content/@i18n/ja/references/protocol/data-types/currency-formats.md similarity index 72% rename from content/references/protocol-reference/data-types/currency-formats.ja.md rename to content/@i18n/ja/references/protocol/data-types/currency-formats.md index 647e109010..8880f08e60 100644 --- a/content/references/protocol-reference/data-types/currency-formats.ja.md +++ b/content/@i18n/ja/references/protocol/data-types/currency-formats.md @@ -8,7 +8,7 @@ labels: --- # 通貨フォーマット -XRP Ledgerには2種類の通貨 XRP と[発行済み通貨](issued-currencies.html))があります。XRP Ledgerでは、これらの通貨のフォーマットは異なりますが、いずれの通貨も高精度です。 +XRP Ledgerには2種類の通貨 XRP と[トークン](tokens.html))があります。XRP Ledgerでは、これらの通貨のフォーマットは異なりますが、いずれの通貨も高精度です。 ## 文字列フォーマット @@ -25,25 +25,25 @@ XRPの精度は、64ビット符号なし整数と同等であり、各単位は * `0.000001`(10-6)XRPに近い精度 - `"1"` dropのXRP -## 発行済み通貨の精度 +## トークンの精度 -XRP Ledgerの発行済み通貨は、以下の精度のカスタムフォーマットで表現されます。 +XRP Ledgerのトークンは、以下の精度のカスタムフォーマットで表現されます。 * 非ゼロの最小絶対値: `1000000000000000e-96` * 最大値: `9999999999999999e80` * 最小値: `-9999999999999999e80` * 10進15桁の精度 -## 発行済み通貨の計算 +## トークンの計算 [[ソース]](https://github.com/XRPLF/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/STAmount.cpp "Source") -![発行済み通貨額フォーマットの図](img/currency-number-format.ja.png) +![トークンの金額フォーマットの図](img/currency-number-format.ja.png) -`rippled`内部では発行済み通貨の数値はカスタムの数値フォーマットで表現されます。このフォーマットではさまざまな資産(一般的にごく小さな単位または極めて大きな単位で測定される資産を含む)を保管できます。このフォーマットでは、有効数字と10のべき乗の指数を科学的記数法と同様の方法で使用します。このフォーマットは、指定された範囲内のプラスまたはマイナスの有効桁数と指数に対応しています。非整数値の一般的な浮動小数点表記とは異なり、このフォーマットでは整数を用いて計算します。このため、常に15桁の精度が維持されます。乗算と除算には、最下位の有効数字の丸め過ぎを補う調整機能があります。 +`rippled`内部ではトークンの数値はカスタムの数値フォーマットで表現されます。このフォーマットではさまざまな資産(一般的にごく小さな単位または極めて大きな単位で測定される資産を含む)を保管できます。このフォーマットでは、有効数字と10のべき乗の指数を科学的記数法と同様の方法で使用します。このフォーマットは、指定された範囲内のプラスまたはマイナスの有効桁数と指数に対応しています。非整数値の一般的な浮動小数点表記とは異なり、このフォーマットでは整数を用いて計算します。このため、常に15桁の精度が維持されます。乗算と除算には、最下位の有効数字の丸め過ぎを補う調整機能があります。 「任意精度」の数値フォーマットとは異なり、カスタムフォーマットは64ビットの固定サイズで格納できます。このようにシリアル化される場合、このフォーマットは「非XRP」ビット、符号ビット、有効桁数、指数で構成されます。これらは次の順で表示されます。 -1. 発行済み通貨額の1番目のビット(最上位ビット)は、XRPの額ではないことを示す`1`です。(XRPの額である場合、最上位ビットは常に`0`に設定され、このフォーマットからXRPの額が区別されます。) +1. トークン金額の1番目のビット(最上位ビット)は、XRPの額ではないことを示す`1`です。(XRPの額である場合、最上位ビットは常に`0`に設定され、このフォーマットからXRPの額が区別されます。) 2. 符号ビットは、金額のプラスマイナスを示します。標準的な[2の補数で表される](https://en.wikipedia.org/wiki/Two%27s_complement)整数とは異なり、`1` はXRP Ledgerフォーマットでは**プラス**を示し`0`はマイナスを示します。 3. 次の8ビットは、指数を符号なし整数で表しています。指数は、小数点以下桁数(有効桁数に乗算する10のべき乗)を-96以上+80以下の範囲で示します。ただしシリアル化では、この指数に97を加算して符号なし整数としてシリアル化できるようにします。したがってシリアル化された値が`1`の場合は指数`-96`、シリアル化された値が`177`の場合は指数80を示します。 4. 残りの54ビットは、有効数字を符号なし整数で表します。シリアル化では、値0の特殊なケースを除き、この値は1015(`1000000000000000`)以上1016-1(`9999999999999999`)以下の範囲で正規化されます。値0の特殊なケースがあります。この場合符号ビット、指数、および仮数はすべてゼロであるため、64ビット値は`0x8000000000000000000000000000000000000000`としてシリアル化されます。 @@ -51,7 +51,7 @@ XRP Ledgerの発行済み通貨は、以下の精度のカスタムフォーマ ## 通貨コード -XRP LedgerのXRP以外の通貨には160ビットの通貨コードがあります。[`rippled`API](http-websocket-apis.html)では、標準マッピングを使用して3文字のASCII文字列(大文字と小文字の区別あり)が160ビットの通貨コードにマッピングされます。通貨コード`XRP`は発行済み通貨には使用できません。同一コードの通貨は接続トラストラインを通じて[ripple](rippling.html)できます。通貨コードには、XRP Ledgerに組み込まれるその他の動作はありません。 +XRP LedgerのXRP以外の通貨には160ビットの通貨コードがあります。[`rippled`API](http-websocket-apis.html)では、標準マッピングを使用して3文字のASCII文字列(大文字と小文字の区別あり)が160ビットの通貨コードにマッピングされます。通貨コード`XRP`はトークンには使用できません。同一コードの通貨は接続トラストラインを通じて[ripple](rippling.html)できます。通貨コードには、XRP Ledgerに組み込まれるその他の動作はありません。 ### 標準通貨コード @@ -62,7 +62,7 @@ XRP LedgerのXRP以外の通貨には160ビットの通貨コードがありま 1. 最初の8ビットは`0x00`でなければなりません。 2. 次の88ビットは予約済みであり、すべて`0`です。 3. 次の24ビットは3つのASCII文字を表します。 - [ISO 4217](https://www.xe.com/iso4217.php)コードまたはよく利用されている疑似ISO 4217コード(BTCなど)の使用が推奨されます。ただし、すべての大文字と小文字、桁数、および記号`?`、`!`、`@`、`#`、`$`、`%`、`^`、`&`、`*`、`<`、`>`、`(`、`)`、`{`、`}`、`[`、`]`、および|の組み合わせを使用できます。通貨コード`XRP`(すべて大文字)はXRP用に予約されており、発行済み通貨には使用できません。 + [ISO 4217](https://www.xe.com/iso4217.php)コードまたはよく利用されている疑似ISO 4217コード(BTCなど)の使用が推奨されます。ただし、すべての大文字と小文字、桁数、および記号`?`、`!`、`@`、`#`、`$`、`%`、`^`、`&`、`*`、`<`、`>`、`(`、`)`、`{`、`}`、`[`、`]`、および|の組み合わせを使用できます。通貨コード`XRP`(すべて大文字)はXRP用に予約されており、トークンには使用できません。 4. 次の40ビットは予約済みであり、すべて`0`です。 通常、XRP額の指定時には通貨コードは使用しません。フィールドにXRPの通貨コードが指定されている稀なケースでは、通貨コードのバイナリ形式はすべてゼロになります。 diff --git a/content/references/protocol-reference/data-types/nftoken.ja.md b/content/@i18n/ja/references/protocol/data-types/nftoken.md similarity index 100% rename from content/references/protocol-reference/data-types/nftoken.ja.md rename to content/@i18n/ja/references/protocol/data-types/nftoken.md diff --git a/content/@i18n/ja/references/protocol/index.md b/content/@i18n/ja/references/protocol/index.md new file mode 100644 index 0000000000..d66ed2cbcb --- /dev/null +++ b/content/@i18n/ja/references/protocol/index.md @@ -0,0 +1,10 @@ +--- +html: protocol-reference.html +parent: references.html +template: pagetype-category.html.jinja +eyebrow_text: 特徴とルール +blurb: XRP Ledgerプロトコルの、利用方法に依存しない特徴やルールについて。 +--- +# XRP Ledgerプロトコルリファレンス + +XRP Ledgerプロトコルの、利用方法に依存しない特徴やルールについて。 \ No newline at end of file diff --git a/content/references/protocol-reference/ledger-data/ledger-data-formats.ja.md b/content/@i18n/ja/references/protocol/ledger-data/index.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-data-formats.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/index.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/accountroot.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/accountroot.md similarity index 54% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/accountroot.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/accountroot.md index a573a9f673..cb146a3084 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/accountroot.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/accountroot.md @@ -1,7 +1,7 @@ --- html: accountroot.html parent: ledger-entry-types.html -blurb: あるアカウントの設定、XRP残高、その他のメタデータです。 +blurb: あるアカウントの設定、XRP残高、その他のメタデータを表します。 labels: - アカウント - XRP @@ -40,7 +40,7 @@ labels: |:------------------------------|:---------|:------------------|:------|:------| | `Account` | 文字列 | AccountID | はい | この[アカウント](accounts.html)を識別するための(クラシック)アドレスです。 | | `AccountTxnID` | 文字列 | Hash256 | いいえ | このアカウントから直近に送信されたトランザクションの識別ハッシュ。このフィールドは、[`AccountTxnID`トランザクションフィールド](transaction-common-fields.html#accounttxnid)を使うために有効になっていなければなりません。これを有効にするには、[`asfAccountTxnID`フラグを有効にしたAccountSetトランザクション](accountset.html#accountsetのフラグ)を送信してください。 | -| `AMMID` | 文字列 | Hash256 | いいえ | _([AMM amendment][] :not_enabled:が必要。)_ The ledger entry ID of the corresponding AMM ledger entry. Set during account creation; cannot be modified. If present, indicates that this is a special AMM AccountRoot; always omitted on non-AMM accounts. | +| `AMMID` | 文字列 | Hash256 | いいえ | _([AMM amendment][] :not_enabled:が必要です。)_ 対応するAMMレジャーエントリのレジャーエントリID。アカウント作成時に設定します。AMM以外のアカウントでは常に省略されます。 | | `Balance` | 文字列 | Amount | いいえ | アカウントの現在の[drop単位のXRP残高][XRP、drop単位]で、文字列で表現されます。 | | `BurnedNFTokens` | 数値 | UInt32 | いいえ | このアカウントで発行された [非代替性トークン](non-fungible-tokens.html) のうち、バーンしたトークンの総数を表します。この数値は常に `MintedNFTokens` と同じかそれ以下となります。 | | `Domain` | 文字列 | VariableLength | いいえ | このアカウントに関連付けられたドメイン。JSONでは、ドメインのASCII表現を16進数で表現します。[256バイトを超える長さは使用できません](https://github.com/xrplf/rippled/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) | @@ -56,49 +56,62 @@ labels: | `RegularKey` | 文字列 | AccountID | いいえ | このアカウントのトランザクションに署名するときにマスターキーの代わりに使用できる[キーペア](cryptographic-keys.html)のアドレス。この値を変更するには[SetRegularKeyトランザクション][]を使用してください。 | | `Sequence` | 数値 | UInt32 | はい | このアカウントの有効な次のトランザクションの[シーケンス番号](basic-data-types.html#アカウントシーケンス) を表します。 | | `TicketCount` | 数値 | UInt32 | いいえ | このアカウントが台帳に保有する[チケット](tickets.html)の数です。これは、アカウントが一度に250 チケットという上限以内に留まることを保証するために自動的に更新されます。このフィールドは、チケットの数がゼロの場合は省略されます。 _([TicketBatch amendment][]により追加されました)_ | -| `TickSize` | 数値 | UInt8 | いいえ | このアドレスが発行した通貨が関わるオファーの為替レートに使用する有効桁数。有効な値は`3`以上`15`以下です。_([TickSize Amendment][]が必要です。)_ | +| `TickSize` | 数値 | UInt8 | いいえ | このアドレスが発行した通貨が関わるオファーの為替レートに使用する有効桁数。有効な値は`3`以上`15`以下です。_([TickSize Amendment][]により追加されました。)_ | | `TransferRate` | 数値 | UInt32 | いいえ | このアカウントが発行した通貨を他のユーザーが相互に送金する際に、これらのユーザーに請求する[送金手数料](transfer-fees.html)。 | | `WalletLocator` | 文字列 | Hash256 | いいえ | ユーザーが設定できる任意の256bit値。 | | `WalletSize` | 数値 | UInt32 | いいえ | 未使用。(コード上ではこのフィールドをサポートしていますが、設定する方法はありません)。 | -## AMMの特殊なAccountRootオブジェクト +## AMMの特殊なAccountRootエントリ -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ - - -[自動マーケットメーカー](automated-market-makers.html) (AMM) は、AMMの詳細の一部を追跡するための[AMMオブジェクト][]に加えて、LPトークンを発行しAMMプール内の資産を保持するためにAccountRootオブジェクトを使用します。AMMに関連するAccountRootのアドレスは、AMMが作成される前にユーザーがそのアドレスを特定し資金を提供できないように、ランダム化されています。AMMのAccountRootは、通常のアカウントとは異なり、以下のような設定で作成されます。 +[自動マーケットメーカー](automated-market-makers.html)(AMM)は、AMMの詳細の一部を追跡するための[AMMレジャーエントリ](amm.html)に加えて、LPトークンを発行しAMMプール内の資産を保持するためにAccountRootレジャーエントリを使用します。AMMに関連するAccountRootのアドレスは、AMMが作成される前にユーザがそのアドレスを特定し資金を提供できないように、ランダム化されています。AMMのAccountRootは、通常のアカウントとは異なり、以下のような設定で作成されます。 - `lsfDisableMaster` **有効** : トランザクションへ署名する手段はありません。これにより、誰もそのアカウントを直接操作することができず、トランザクションを送信することができなくなります。 - `lsfRequireAuth` **有効** : 事前承認されているアカウントは存在しません。これにより、AMMアカウントに資産を追加する唯一の方法は、[AMMDepositトランザクション][]を使用することであることが保証されます。 -- `lsfDefaultRipple` **有効** : ユーザー間でAMMのLPトークンを送信したり、取引したりすることが可能になります。 +- `lsfDefaultRipple` **有効** : ユーザ間でAMMのLPトークンを送信したり、取引したりすることが可能になります。 -これらの特殊なアカウントは、[準備金要件](reserves.html)の対象外ですが、AMMのプール内の2つの資産のうちの1つであれば、XRPを保有することができます。 +さらに、AMMのAccountRootエントリには以下の特別なルールが適用されます。 + +- このAMM向けの特殊なアカウントは、[準備金要件](reserves.html)の対象外ですが、AMMのプール内の2つの資産のうちの1つであれば、XRPを保有することができます。 +- チェック、エスクロー、ペイメントチャネルの宛先にはできません。そのようなエントリを作成するトランザクションは結果コード`tecNO_PERMISSION`で失敗します。 +- ユーザはAMMのLPトークン以外のためにトラストラインを作成することはできません。そのようなトラストラインを作成するトランザクションは結果コード`tecNO_PERMISSION`で失敗します。(AMMはそのプール内のトークンを保持するために2つのトラストラインを持っており、プール内の他の資産がXRPの場合は1つのトラストラインを持っています)。 +- [Clawback Amendment][]も有効になっている場合においても、トークンの発行者はAMMから資金を回収することはできません。 LPトークンは他の[トークン](tokens.html)と同様に動作しますが、これらのトークンはAMM関連のトランザクションでも使用することができます。AMMの残高や、AMMに影響を与えたトランザクションの履歴は、通常のアカウントと同じように確認することができます。 ## AccountRootのフラグ -このアカウントに対して有効化または無効化できる各種オプションがあります。これらのオプションを変更するには、[AccountSetトランザクション][]を使用します。レジャーではフラグはバイナリ値として表され、これらのバイナリ値はビットOR演算と組み合わせることができます。レジャーでのフラグのビット値は、トランザクションでこれらのフラグを有効または無効にするために使用する値とは異なります。レジャーのフラグには、 _lsf_ で始まる名前が付いています。 +AccountRootフラグの多くは、[AccountSetトランザクション][]で変更できるオプションに対応しています。ただし、レジャーで使用されるビット値は、トランザクションでそれらのフラグを有効または無効にするために使用される値とは異なります。レジャーのフラグは **lsf`** で始まる名前を持ちます。 -AccountRootオブジェクトには以下のフラグ値を指定できます。 +AccountRootオブジェクトは`Flags`フィールドに以下のフラグを指定できます。 -| フラグ名 | 16進数値 | 10進数値 | 対応する[AccountSetのフラグ](accountset.html#accountsetのフラグ) | 説明 | -|---------------------|--------------|----------|---------------|-------------------------------| -| `lsfDefaultRipple` | `0x00800000` | 8388608 | `asfDefaultRipple` | このアドレスのトラストラインでデフォルトで[rippling](rippling.html)を有効にします。発行アドレスに必要です。他のアドレスでの使用は推奨されません。 | -| `lsfDepositAuth` | `0x01000000` | 16777216 | `asfDepositAuth` | このアカウントは、アカウントが送信するトランザクションと、[事前承認された](depositauth.html#事前承認)アカウントからの資金だけを受領します。([DepositAuth](depositauth.html)が有効になっています。) | -| `lsfDisableMaster` | `0x00100000` | 1048576 | `asfDisableMaster` | このアカウントのトランザクションの署名にマスターキーを使用することを禁止します。 | -| `lsfDisallowXRP` | `0x00080000` | 524288 | `asfDisallowXRP` | クライアントアプリケーションはこのアカウントにXRPを送金しないでください。`rippled`により強制されるものではありません。 | -| `lsfGlobalFreeze` | `0x00400000` | 4194304 | `asfGlobalFreeze` | このアドレスが発行するすべての資産が凍結されます。 | -| `lsfNoFreeze` | `0x00200000` | 2097152 | `asfNoFreeze` | このアドレスは、このアドレスに接続しているトラストラインを凍結できません。一度有効にすると、無効にできません。 | -| `lsfPasswordSpent` | `0x00010000` | 65536 | (なし) | このアカウントは無料のSetRegularKeyトランザクションを使用しています。 | -| `lsfRequireAuth` | `0x00040000` | 262144 | `asfRequireAuth` | このアカウントは、他のユーザーがこのアカウントのトークンを保有することを個別に承認する必要があります。 | -| `lsfRequireDestTag` | `0x00020000` | 131072 | `asfRequireDest` | 受信ペイメントには宛先タグの指定が必要です。 | +| フラグ名 | 16進数値 | 10進数値 | 対応する[AccountSetのフラグ](accountset.html#accountsetのフラグ) | 説明 | +|-----------------------------------|--------------|----------|-------------------------------------|-------------------------------| +| `lsfAllowTrustLineClawback` | `0x80000000` | 2147483648 | `asfAllowTrustLineClawback` | このアカウントの[Clawback](clawing-back-tokens.html)を有効にします。 _([Clawback Amendment][]が必要です。)_ | +| `lsfDefaultRipple` | `0x00800000` | 8388608 | `asfDefaultRipple` | このアドレスのトラストラインでデフォルトで[rippling](rippling.html)を有効にします。発行アドレスに必要です。他のアドレスでの使用は推奨されません。 | +| `lsfDepositAuth` | `0x01000000` | 16777216 | `asfDepositAuth` | このアカウントは、アカウントが送信するトランザクションと、[事前承認された](depositauth.html#事前承認)アカウントからの資金だけを受領します。([DepositAuth](depositauth.html)が有効になっています。) | +| `lsfDisableMaster` | `0x00100000` | 1048576 | `asfDisableMaster` | このアカウントのトランザクションの署名にマスターキーを使用することを禁止します。 | +| `lsfDisallowIncomingCheck` | `0x08000000` | 134217728 | `asfDisallowIncomingCheck` | このアカウントを宛先とするチェックの作成をブロックします。 _([DisallowIncoming Amendment][]により追加されました。)_ | +| `lsfDisallowIncomingNFTokenOffer` | `0x04000000` | 67108864 | `asfDisallowIncomingNFTokenOffer` | このアカウントを宛先とするNFTokenオファーの作成をブロックします。 _([DisallowIncoming Amendment][]により追加されました。)_ | +| `lsfDisallowIncomingPayChan` | `0x10000000` | 268435456 | `asfDisallowIncomingPayChan` | このアカウントを宛先とするペイメントチャネルの作成をブロックします。 _([DisallowIncoming Amendment][]により追加されました。)_ | +| `lsfDisallowIncomingTrustline` | `0x20000000` | 536870912 | `asfDisallowIncomingTrustline` | このアカウントに対するトラストラインの作成をブロックします。 _([DisallowIncoming Amendment][]により追加されました。)_ | +| `lsfDisallowXRP` | `0x00080000` | 524288 | `asfDisallowXRP` | クライアントアプリケーションはこのアカウントにXRPを送金しないでください。`rippled`により強制されるものではありません。 | +| `lsfGlobalFreeze` | `0x00400000` | 4194304 | `asfGlobalFreeze` | このアドレスが発行するすべての資産が凍結されます。 | +| `lsfNoFreeze` | `0x00200000` | 2097152 | `asfNoFreeze` | このアドレスは、このアドレスに接続しているトラストラインを凍結できません。一度有効にすると、無効にできません。 | +| `lsfPasswordSpent` | `0x00010000` | 65536 | (なし) | このアカウントは無料のSetRegularKeyトランザクションを使用しています。 | +| `lsfRequireAuth` | `0x00040000` | 262144 | `asfRequireAuth` | このアカウントは、他のユーザーがこのアカウントのトークンを保有することを個別に承認する必要があります。 | +| `lsfRequireDestTag` | `0x00020000` | 131072 | `asfRequireDest` | 受信ペイメントには宛先タグの指定が必要です。 | +## {{currentpage.name}}の準備金 + +AccountRootエントリの[準備金](reserves.html)は、特別なAMM AccountRootの場合を除き、現在の基本準備金である{{target.base_reserve}}です。 + +このXRPは他人に送ることはできませんが、[トランザクションコスト][]の一部として利用することができます。 ## AccountRoot IDのフォーマット -AccountRootオブジェクトのIDは、以下の値がこの順序で連結されている[SHA-512ハーフ][]です。 +AccountRootエントリのIDは、以下の値がこの順序で連結されている[SHA-512ハーフ][]です。 * Accountスペースキー(`0x0061`) * アカウントのAccountID diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/amendments.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amendments.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/amendments.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amendments.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/amm.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amm.md similarity index 80% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/amm.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amm.md index 288807e804..4c4c9fb33e 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/amm.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amm.md @@ -7,18 +7,18 @@ labels: status: not_enabled --- # AMM -[[Source]](https://github.com/xrplf/rippled/blob/c1e4bfb08bcc9f187d794a71d653003a6148dc68/src/ripple/protocol/impl/LedgerFormats.cpp#L265-L275 "Source") +[[ソース]](https://github.com/xrplf/rippled/blob/c1e4bfb08bcc9f187d794a71d653003a6148dc68/src/ripple/protocol/impl/LedgerFormats.cpp#L265-L275 "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ -`AMM`オブジェクトは、単一の[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスを表します。 +`AMM`レジャーエントリは、単一の[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスを表します。これは常に[特殊な AccountRootエントリ](accountroot.html#ammの特殊なaccountrootエントリ)と対になっています。 ## AMM JSONの例 ```json { - "AMMAccount" : "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S", + "Account" : "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S", "Asset" : { "currency" : "XRP" }, @@ -75,7 +75,7 @@ _([AMM amendment][] :not_enabled:が必要。)_ |:-----------------|:--------------------|:------------------|:----------|--------------| | `Asset` | オブジェクト | STIssue | はい | このAMMが保有する2つのアセットのうちの1つの定義。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります。 | | `Asset2` | オブジェクト | STIssue | はい | このAMMが保有するもう一つの資産の定義。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります。 | -| `AMMAccount` | 文字列 | AccountID | はい | このAMMの資産を保有する[特殊なアカウント](accountroot.html#ammの特殊なaccountrootオブジェクト)のアドレス。 | +| `Account` | 文字列 | AccountID | はい | このAMMの資産を保有する[特殊なアカウント](accountroot.html#ammの特殊なaccountrootエントリ)のアドレス。 | | `AuctionSlot` | オブジェクト | STObject | いいえ | オークションスロットの現在の所有者の詳細。[オークションスロットオブジェクト](#オークションスロットオブジェクト)形式です。| | `LPTokenBalance` | [通貨額][] | Amount | はい | AMMインスタンスの流動性供給者トークンの発行残高の合計。このトークンの保有者は、保有量に比例してAMMの取引手数料に投票したり、取引手数料の徴収とともに増えていくAMMの資産の一部とトークンを交換したりすることができます。 | | `TradingFee` | 数値 | UInt16 | はい | AMMインスタンスに対する取引に課される手数料のパーセンテージを1/100,000の単位で指定します。最大値は1000で、これは1%の手数料となります。 | @@ -93,19 +93,23 @@ _([AMM amendment][] :not_enabled:が必要。)_ | `Price` | [通貨額][] | Amount | はい | オークションスロットの所有者がこのスロットを落札するために支払った金額(LPトークン)。 | | `Expiration` | 文字列 | UInt32 | はい | このスロットの有効期限が切れる[Rippleエポック以降の経過秒数][]で指定した時刻。 | +## {{currentpage.name}}の準備金 + +`{{currentpage.name}}`エントリは準備金が不要です。 + ## AMM フラグ -現在、`AMM`オブジェクトに定義されているフラグはありません。 +`AMM`エントリに定義されているフラグはありません。 ## AMM ID フォーマット -`AMM`オブジェクトのIIは、以下の値の[SHA-512Half][]を順に繋げたものです。 +`AMM`エントリのIDは、以下の値を順に繋げた[SHA-512Half][]です。 1. `AMM`のスペースキー(`0x0041`) -0. 第1アセットの発行者のAccountID。 -0. 第1トークンの160ビットの通貨コード。 -0. 第2アセットの発行者のAccountID。 -0. 第2トークンの160ビットの通貨コード。 +2. 第1アセットの発行者のAccountID。 +3. 第1トークンの160ビットの通貨コード。 +4. 第2アセットの発行者のAccountID。 +5. 第2トークンの160ビットの通貨コード。 XRPの場合、トークン・発行者ともに全て0を使用します。 diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/check.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/check.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/check.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/check.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/depositpreauth.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/depositpreauth.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/directorynode.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/directorynode.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/directorynode.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/directorynode.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/escrow.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/escrow.md similarity index 99% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/escrow.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/escrow.md index 4202574069..ceb6e273d8 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/escrow.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/escrow.md @@ -8,7 +8,7 @@ labels: # Escrow [[ソース]](https://github.com/XRPLF/rippled/blob/c6b6d82a754fe449cc533e18659df483c10a5c98/src/ripple/protocol/impl/LedgerFormats.cpp#L90-L101 "Source") -_([Escrow Amendment][]が必要です。)_ +_([Escrow Amendment][]により追加されました。)_ `Escrow`オブジェクトタイプは、実行または取り消しを待機している保留中のXRP支払を表します。[EscrowCreateトランザクション][]はレジャーに`Escrow`オブジェクトを作成します。[EscrowFinish][]トランザクションまたは[EscrowCancel][]トランザクションが正常に完了すると、オブジェクトが削除されます。``Escrow``オブジェクトに [_Crypto-condition_](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02)が指定されている場合、支払が成功するのは、EscrowFinishトランザクションに指定された対応する _フルフィルメント_ がその条件を満たす場合だけです。(サポートされている唯一のCrypto-conditionタイプは[PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1)です。)`Escrow`オブジェクトに`FinishAfter`時刻が指定されている場合、保留中の支払はその時刻の経過後にのみ実行されます。 diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/feesettings.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/feesettings.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/feesettings.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/feesettings.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/index.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/index.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/negativeunl.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/negativeunl.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenpage.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenpage.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/offer.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/offer.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/offer.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/offer.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/paychannel.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/paychannel.md similarity index 99% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/paychannel.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/paychannel.md index cec40b4d65..2d96e87d14 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/paychannel.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/paychannel.md @@ -8,7 +8,7 @@ labels: # PayChannel [[ソース]](https://github.com/XRPLF/rippled/blob/c0a0b79d2d483b318ce1d82e526bd53df83a4a2c/src/ripple/protocol/impl/LedgerFormats.cpp#L180-L198 "Source") -_([PayChan Amendment][]が必要です。)_ +_([PayChan Amendment][]により追加されました。)_ `PayChannel`オブジェクトタイプは、Payment Channelを表します。Payment Channelにより、レジャー外で少額のXRPを迅速に支払うことができます。このような支払は、コンセンサスレジャーにより後日調整できます。Payment Channelは、このChannelが閉鎖されるまでは、特定の宛先アドレスに対してのみ支払可能なXRPの残高を保有します。Channelの閉鎖時に、未使用のXRPはChannelの所有者(Channelを作成し、資金を供給した支払元アドレス)に返金されます。 diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ripplestate.md similarity index 99% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ripplestate.md index 24a00f4fa5..6c083bf770 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ripplestate.md @@ -49,7 +49,7 @@ XRP Ledgerではどのアカウントにも権限がないため、`RippleState` |-----------------|-----------|---------------|-------------| | `LedgerEntryType` | 文字列 | UInt16 | 値`0x0072`が文字列`RippleState`にマッピングされている場合は、このオブジェクトがRippleStateオブジェクトであることを示します。 | | `Flags` | 数値 | UInt32 | このオブジェクトに対して有効になっているブールオプションのビットマップ。 | -| `Balance` | オブジェクト | Amount | 低位アカウントからみたトラストラインの残高。残高がマイナスの場合、低位アカウントから高位アカウントに対して通貨が発行されています。この場合のイシュアーは常に中立値[ACCOUNT_ONE](accounts.html#特別なアドレス)に設定されます。 | +| `Balance` | オブジェクト | Amount | 低位アカウントからみたトラストラインの残高。残高がマイナスの場合、低位アカウントから高位アカウントに対して通貨が発行されています。この場合のイシュアーは常に中立値[ACCOUNT_ONE](addresses.html#特別なアドレス)に設定されます。 | | `LowLimit` | オブジェクト | Amount | 低位アカウントがトラストラインに設定した限度額。`issuer`は、この限度額を設定した低位アカウントのアドレスです。 | | `HighLimit` | オブジェクト | Amount | 高位アカウントがトラストラインに設定した限度額。`issuer`は、この限度額を設定した高位アカウントのアドレスです。 | | `PreviousTxnID` | 文字列 | Hash256 | 最後にこのオブジェクトを変更したトランザクションの識別用ハッシュ。 | diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/signerlist.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/signerlist.md similarity index 99% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/signerlist.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/signerlist.md index 4998726a46..e4392266c5 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/signerlist.ja.md +++ b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/signerlist.md @@ -8,7 +8,7 @@ labels: # SignerList [[ソース]](https://github.com/XRPLF/rippled/blob/6d2e3da30696bd10e3bb11a5ff6d45d2c4dae90f/src/ripple/protocol/impl/LedgerFormats.cpp#L127 "Source") -_([MultiSign Amendment][]が必要です。)_ +_([MultiSign Amendment][]により追加されました。)_ `SignerList`オブジェクトタイプは、個別アカウントの代わりにグループとしてトランザクション署名をすることが承認されている署名者のリストです。[SignerListSetトランザクション][]を使用して、SignerListを作成、置き換え、または削除できます。 diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ticket.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ticket.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ticket.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ticket.md diff --git a/content/references/protocol-reference/ledger-data/ledger-header.ja.md b/content/@i18n/ja/references/protocol/ledger-data/ledger-header.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-header.ja.md rename to content/@i18n/ja/references/protocol/ledger-data/ledger-header.md diff --git a/content/references/protocol-reference/transactions/transaction-common-fields.ja.md b/content/@i18n/ja/references/protocol/transactions/common-fields.md similarity index 88% rename from content/references/protocol-reference/transactions/transaction-common-fields.ja.md rename to content/@i18n/ja/references/protocol/transactions/common-fields.md index b7bb2f96be..33ee3ddf05 100644 --- a/content/references/protocol-reference/transactions/transaction-common-fields.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/common-fields.md @@ -18,6 +18,7 @@ labels: | [AccountTxnID][] | 文字列 | Hash256 | _(省略可)_ 別のトランザクションを識別するためのハッシュ値。このハッシュがある場合、このトランザクションが有効になるのは、送信側のアカウントの直前送信トランザクションがこのハッシュと一致しているときのみです。 | | [Flags][] | 符号なし整数 | UInt32 | _(省略可)_ このトランザクションのビットフラグのセット。 | | LastLedgerSequence | 数値 | UInt32 | _(省略可。使用を強く推奨)_ このトランザクションを登録できるレジャーインデックスの最大値。このフィールドを指定することにより、トランザクションが検証または拒否されるのを待たなければならない期間の上限を設定することができます。詳細は、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。 | +| [`NetworkID`](#networkidフィールド) | Number | UInt32 | _(Network-specific)_ The network ID of the chain this transaction is intended for. **MUST BE OMITTED** for Mainnet and some test networks. **REQUIRED** on chains whose network ID is 1025 or higher. | | [Memos][] | オブジェクトの配列 | 配列 | _(省略可)_ このトランザクションの識別に使用される任意の追加情報。 | | [Signers][] | 配列 | 配列 | _(省略可)_ このトランザクションを承認するための[マルチシグ](multi-signing.html)を表すオブジェクトの配列。 | | SourceTag | 符号なし整数 | UInt32 | _(省略可)_ この支払いの理由、またはこのトランザクションの実行元である送信者を識別するために使用される任意の整数。一般的に、返金については、最初の支払いの`SourceTag`を返金の`DestinationTag`として指定する必要があります。 | @@ -42,8 +43,7 @@ labels: AccountTxnIDを使用するには、アカウントの1つ前のトランザクションのIDがレジャーで追跡されるよう、最初に[asfAccountTxnID](accountset.html#accountsetのフラグ)フラグを設定する必要があります。 -## 自動入力可能なフィールド -## Auto-fillable Fields {.invisible} +## 自動入力可能なフィールド 一部のフィールドについては、トランザクションの署名前に、`rippled`サーバーによって、または署名に使用される[ripple-lib][]などのライブラリーによって値を自動入力できます。値を自動入力するには、最新の状態を取得するためのXRP Ledgerへのアクティブな接続が必要です。したがって、オフラインでは実行できません。[ripple-lib][]と`rippled`のどちらも、以下の値を自動的に提供できます。 @@ -125,6 +125,30 @@ MemoTypeフィールドとMemoFormatフィールドには、以下の文字の "Amount": "1" } ``` +## NetworkIDフィールド +[新規: rippled 1.11.0][] + + + +The `NetworkID` field is a protection against "cross-chain" transaction replay attacks, preventing the same transaction from being copied over and executing on a [parallel network](parallel-networks.html) that it wasn't intended for. For compatibility with existing chains, the `NetworkID` field must be omitted on any network with a Network ID of 1024 or less, but must be included on any network with a Network ID of 1025 or greater. The following table shows the status and values for various known networks: + +| Network | ID | `NetworkID` Field | +|---------------|----|-------------------| +| Mainnet | 0 | Disallowed | +| Testnet | 1 | Disallowed | +| Devnet | 2 | Disallowed | +| AMM Devnet | 25 | Disallowed | +| Sidechains Devnet Locking Chain | 2551 | Disallowed, but will become required after an update | +| Sidechains Devnet Issuing Chain | 2552 | Disallowed, but will become required after an update | +| Hooks V3 Testnet | 21338 | Required | + +Transaction replay attacks are theoretically possible, but require specific conditions on the second network. All of the following must be true: + +- The transaction's sender is a funded account on the second network. +- The sender's `Sequence` number on the second network matches the transaction's `Sequence`, or the transaction uses a [Ticket](tickets.html) that's available on the second network. +- Either the transaction does not have a `LastLedgerSequence` field, or it specifies a value that is higher than the current ledger index on the second ledger. + - Mainnet generally has a higher ledger index than test networks or sidechains, so it is easier to replay Mainnet transactions on a sidechain or test network than the other way around, when transactions use `LastLedgerSequence` as intended. +- Either the networks both have IDs of 1024 or less, both networks use the same ID, or the second network does not require the `NetworkID` field. ## Signersフィールド diff --git a/content/references/protocol-reference/transactions/transaction-formats.ja.md b/content/@i18n/ja/references/protocol/transactions/index.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-formats.ja.md rename to content/@i18n/ja/references/protocol/transactions/index.md diff --git a/content/references/protocol-reference/transactions/transaction-metadata.ja.md b/content/@i18n/ja/references/protocol/transactions/metadata.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-metadata.ja.md rename to content/@i18n/ja/references/protocol/transactions/metadata.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.ja.md b/content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/enableamendment.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.ja.md rename to content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/enableamendment.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.ja.md b/content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md similarity index 95% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.ja.md rename to content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md index 6239c2e457..bd76f6f2dc 100644 --- a/content/references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md @@ -14,7 +14,7 @@ labels: | フィールド | デフォルト値 | |:--------------|:---------------------------------------------------------| -| Account | [ACCOUNT_ZERO](accounts.html#特別なアドレス) | +| Account | [ACCOUNT_ZERO](addresses.html#特別なアドレス) | | Sequence | 0 | | Fee | 0 | | SigningPubKey | "" | diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/setfee.ja.md b/content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/setfee.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/setfee.ja.md rename to content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/setfee.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.ja.md b/content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/unlmodify.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.ja.md rename to content/@i18n/ja/references/protocol/transactions/pseudo-transaction-types/unlmodify.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tec-codes.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/tec-codes.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-results/tec-codes.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/tec-codes.md index dd3b23e31e..80d6b622fb 100644 --- a/content/references/protocol-reference/transactions/transaction-results/tec-codes.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/transaction-results/tec-codes.md @@ -23,14 +23,14 @@ labels: | `tecEXPIRED` | 148 | トランザクションがオブジェクト(OfferやCheckなど)を作成しようとしましたが、そのオブジェクトで指定された有効期限がすでに経過しています。 | | `tecFAILED_PROCESSING` | 105 | トランザクションの処理中に不明なエラーが発生しました。 | | `tecFROZEN` | 137 | [OfferCreateトランザクション][]が失敗しました。関係する1つまたは両方の資産が[Global Freeze](freezes.html)の対象となっています。 | -| `tecHAS_OBLIGATIONS ` | 151 | 削除するアカウントが削除できないオブジェクトを所有しているため、[AccountDeleteトランザクション][]が失敗しました。詳細は、[アカウントの削除](accounts.html#アカウントの削除)を参照してください。 | +| `tecHAS_OBLIGATIONS ` | 151 | 削除するアカウントが削除できないオブジェクトを所有しているため、[AccountDeleteトランザクション][]が失敗しました。詳細は、[アカウントの削除](deleting-accounts.html)を参照してください。 | | `tecINSUF_RESERVE_LINE` | 122 | 送信側アカウントに、新しいトラストラインを作成するのに十分なXRPがないため、トランザクションが失敗しました。([準備金](reserves.html)を参照してください)このエラーは、取引相手から同一通貨の送信側アカウントへのトラストラインがデフォルト以外の状態である場合に発生します。(その他のケースについては`tecNO_LINE_INSUF_RESERVE`を参照してください。) | | `tecINSUF_RESERVE_OFFER` | 123 | 送信側アカウントに、新しいオファーを作成するのに十分なXRPがないため、トランザクションが失敗しました。([準備金](reserves.html)を参照してください。) | | `tecINSUFF_FEE` | 136 | 指定された[トランザクションコスト](transaction-cost.html)を支払うのに十分なXRPが送金元アカウントにないため、トランザクションが失敗しました。(この場合、送金元のXRPが指定されたトランザクションコストよりも低い場合でも、トランザクション処理によってすべて消却されます。)この結果は、このトランザクションがコンセンサスセットに含まれるのに十分なネットワークに配布された*後に*アカウントの残高が減少した場合にのみ発生します。そうでない場合、トランザクションは配布される前に[`terINSUF_FEE_B`](ter-codes.html)で失敗します。 | | `tecINSUFFICIENT_RESERVE` | 141 | トランザクションによって[必要準備金](reserves.html)が増加し、送信側アカウントの残高を超える可能性があります。[SignerListSet][]、[PaymentChannelCreate][]、[PaymentChannelFund][]、および[EscrowCreate][]からこのエラーコードが返されることがあります。詳細は、[SignerListと準備金](signerlist.html#signerlistと準備金)を参照してください。 | | `tecINTERNAL` | 144 | 不明な内部エラーが発生し、トランザクションコストは適用されました。通常はこのエラーは返されません。このエラーを再現できる場合は、[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | -| `tecINVARIANT_FAILED` | 147 | このトランザクションを実行しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | -| `tecKILLED` | 150 | [OfferCreateトランザクション][]がtfFillOrKillフラグを指定しましたが、トランザクションを確定できなかったため、このトランザクションは取り消されました。_([fix1578 Amendment][]が必要です。)_ | +| `tecINVARIANT_FAILED` | 147 | このトランザクションを実行しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]により追加されました。このエラーを再現できる場合は、[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | +| `tecKILLED` | 150 | [OfferCreateトランザクション][]がtfFillOrKillフラグを指定しましたが、トランザクションを確定できなかったため、このトランザクションは取り消されました。_([fix1578 Amendment][]により追加されました。)_ | | `tecNEED_MASTER_KEY` | 142 | このトランザクションはマスターキーを必要とする変更([マスターキーの無効化または残高凍結能力の放棄](accountset.html#accountsetのフラグ)など)を試みました。[新規: rippled 0.28.0][] | | `tecNO_ALTERNATIVE_KEY` | 130 | トランザクションが唯一の[トランザクション承認](transactions.html#トランザクションの承認)メソッドを削除しようとしました。これは、レギュラーキーを削除する[SetRegularKeyトランザクション][]、SignerListを削除する[SignerListSetトランザクション][]、またはマスターキーを無効にする[AccountSetトランザクション][]である可能性があります。(`rippled` 0.30.0より前のバージョンでは、このトランザクションは`tecMASTER_DISABLED`と呼ばれていました。) | | `tecNO_AUTH` | 134 | トランザクションはトラストラインの残高を、`lsfRequireAuth`フラグが有効になっているアカウントに追加する必要がありましたが、そのトラストラインが承認されていなかったため、失敗しました。トラストラインが存在しない場合は、代わりに`tecNO_LINE`が発生します。 | diff --git a/content/references/protocol-reference/transactions/transaction-results/tef-codes.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/tef-codes.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-results/tef-codes.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/tef-codes.md index a56c4ecfee..8f594e9d1d 100644 --- a/content/references/protocol-reference/transactions/transaction-results/tef-codes.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/transaction-results/tef-codes.md @@ -24,7 +24,7 @@ labels: | `tefEXCEPTION` | トランザクションの処理中に、サーバーが予期しない状態になりました。この状態は、予期しない入力(トランザクションのバイナリーデータの形式が大幅に誤っている場合など)が原因となった可能性があります。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | | `tefFAILURE` | トランザクション適用中の不明な障害。 | | `tefINTERNAL` | トランザクションの適用を試みた際に、サーバーが予期しない状態になりました。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | -| `tefINVARIANT_FAILED` | [トランザクションコスト](transaction-cost.html)を請求しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | +| `tefINVARIANT_FAILED` | [トランザクションコスト](transaction-cost.html)を請求しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]により追加されました。このエラーを再現できる場合は、[問題を報告](https://github.com/XRPLF/rippled/issues)してください。 | | `tefMASTER_DISABLED` | トランザクションはアカウントのマスターキーで署名されていましたが、アカウントに`lsfDisableMaster`フィールドが設定されていました。 | | `tefMAX_LEDGER` | トランザクションには[`LastLedgerSequence`](reliable-transaction-submission.html#lastledgersequence)パラメーターが指定されていましたが、現在のレジャーのシーケンス番号はすでに指定値を上回っています。 | | `tefNO_AUTH_REQUIRED` | [TrustSetトランザクション][]がトラストラインを承認済みとしてマークしようとしましたが、対応するアカウントに対して`lsfRequireAuth`フラグが有効になっていないため、承認は不要です。 | diff --git a/content/references/protocol-reference/transactions/transaction-results/tel-codes.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/tel-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tel-codes.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/tel-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tem-codes.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/tem-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tem-codes.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/tem-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/ter-codes.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/ter-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/ter-codes.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/ter-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tes-success.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/tes-success.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tes-success.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/tes-success.md diff --git a/content/references/protocol-reference/transactions/transaction-results/transaction-results.ja.md b/content/@i18n/ja/references/protocol/transactions/transaction-results/transaction-results.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/transaction-results.ja.md rename to content/@i18n/ja/references/protocol/transactions/transaction-results/transaction-results.md diff --git a/content/references/protocol-reference/transactions/transaction-types/accountdelete.ja.md b/content/@i18n/ja/references/protocol/transactions/types/accountdelete.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-types/accountdelete.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/accountdelete.md index 7f96288d38..fc98c642f9 100644 --- a/content/references/protocol-reference/transactions/transaction-types/accountdelete.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/accountdelete.md @@ -11,7 +11,7 @@ labels: _[DeletableAccounts Amendment](known-amendments.html#deletableaccounts)が必要です_ -AccountDeleteトランザクションは、XRP Ledgerで[アカウント](accountroot.html)と、アカウントが所有するオブジェクトを削除し、可能であれば、アカウントの残りのXRPを指定された送金先アカウントに送信します。アカウントを削除する要件については、[アカウントの削除](accounts.html#アカウントの削除)を参照してください。 +AccountDeleteトランザクションは、XRP Ledgerで[アカウント](accountroot.html)と、アカウントが所有するオブジェクトを削除し、可能であれば、アカウントの残りのXRPを指定された送金先アカウントに送信します。アカウントを削除する要件については、[アカウントの削除](deleting-accounts.html)を参照してください。 ## {{currentpage.name}} JSONの例 diff --git a/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md b/content/@i18n/ja/references/protocol/transactions/types/accountset.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/accountset.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/accountset.md index 3fbd3b105f..b8f70b4690 100644 --- a/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/accountset.md @@ -37,7 +37,7 @@ AccountSetトランザクションは、[XRP Ledgerのアカウント](accountro | `MessageKey` | 文字列 | Blob | _(省略可)_ 暗号化されたメッセージをこのアカウントに送信するための公開鍵です。キーを設定するには、正確に33バイトである必要があり、最初のバイトはキーの種類を示します。secp256k1鍵の場合は`0x02`または`0x03`、Ed25519鍵の場合は`0xED`です。キーを削除するには、空の値を使用します。 | | `NFTokenMinter` | 文字列 | Blob | _(省略可)_ あなたのために[NFTokensをミントする](assign-an-authorized-minter-using-javascript.html)ことができる別のアカウント。 _([NonFungibleTokensV1_1 amendment][]により追加されました.)_ | | [`SetFlag`](#accountsetのフラグ) | 数値 | UInt32 | _(省略可)_ このアカウントについてオプションを有効にするための整数フラグ。 | -| [`TransferRate`](#transferrate) | 符号なし整数 | UInt32 | _(省略可)_ ユーザーがこのアカウントの発行済み通貨を送金するときに請求される手数料。通貨単位の10億分の1で表現されます。手数料なしを意味する特殊なケースの`0`を除いて、`2000000000`より大きくしたり、`1000000000`より小さくしたりすることはできません。 | +| [`TransferRate`](#transferrate) | 符号なし整数 | UInt32 | _(省略可)_ ユーザーがこのアカウントのトークンを送金するときに請求される手数料。通貨単位の10億分の1で表現されます。手数料なしを意味する特殊なケースの`0`を除いて、`2000000000`より大きくしたり、`1000000000`より小さくしたりすることはできません。 | | [`TickSize`](ticksize.html) | 符号なし整数 | UInt8 | _(省略可)_このアドレスによって発行されている通貨が関係するオファーに使用する為替レートの呼値の単位。それらのオファーの為替レートは、この有効桁数へと丸められます。有効な値は`3`から`15`、または無効にするための`0`です_([TickSize Amendment][]により追加されました)。_ | | `WalletLocator` | 文字列 | Hash256 | _(省略可)_ 任意の256ビット値です。指定された場合、この値はアカウントの設定の一部として保存さ れますが、固有の定義や要件を持ちません。 | | `WalletSize` | 数値 | UInt32 | _(省略可)_ 使用されません。このフィールドはAccountSetトランザクションで有効ですが、何の機能もありません | diff --git a/content/references/protocol-reference/transactions/transaction-types/ammbid.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ammbid.md similarity index 77% rename from content/references/protocol-reference/transactions/transaction-types/ammbid.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ammbid.md index e01a76abdb..1d55060357 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammbid.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/ammbid.md @@ -7,13 +7,13 @@ labels: status: not_enabled --- # AMMBid -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMBid.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMBid.cpp "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ [自動マーケットメーカー](automated-market-makers.html)のオークションスロットに入札することができます。落札されると、競り落とされるか24時間が経過するまで、割引料金でAMMと取引することができます。24時間が経過する前に競り落とされた場合、残り時間に応じて落札価格の一部が払い戻されます。 -AMMのLPトークンを使って落札すると、落札額はAMMに返金され、LPトークンの残高が減ります。 +AMMのLPトークンを使って落札すると、落札に利用したLPトークンはAMMに返され、LPトークンの残高が減ります。 ## {{currentpage.name}} JSONの例 @@ -57,7 +57,7 @@ AMMのLPトークンを使って落札すると、落札額はAMMに返金され | フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | |:---------------|:-----------|:- ----------|:----- |:------------| | `Asset` | オブジェクト | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | -| `Asset2` | オブジェクト | STIssue | はい | AMM のプールにあるもう一つのアセットの定義です。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | +| `Asset2` | オブジェクト | STIssue | はい | AMMのプールにあるもう一つのアセットの定義です。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | | `BidMin` | [通貨額][] | Amount | いいえ | スロットに支払う最小の金額。この値を高く設定すると、他の人から競り落とされにくくなります。省略された場合は、落札に必要な最低額を支払います。 | | `BidMax` | [通貨額][] | Amount | いいえ | スロットに支払う最大の金額。落札するためのコストがこの金額より高い場合、取引は失敗します。省略された場合は、落札に必要な金額を支払います。 | | `AuthAccounts` | 配列 | STArray | いいえ | 割引料金で取引を許可する最大4つの追加のアカウントのリスト。これには、トランザクション送信者のアドレスは含めることはできません。これらのオブジェクトはそれぞれ[Auth Accountオブジェクト](#auth-accountオブジェクト)である必要があります。. | @@ -78,32 +78,32 @@ AMMのLPトークンを使って落札すると、落札額はAMMに返金され 落札された場合、トランザクションは自動的に前のスロット所有者を競り落とし、送信者のLPトークンから落札価格が引き落とされます。落札価格は、72分ずつ20回に区切られた時間経過とともに減少します。もし送信者が落札するのに十分なLPトークンを持っていなかったり、入札価格がトランザクションの`BidMax`値より高い場合、トランザクションは`tecAMM_FAILED_BID`という結果で失敗します。 -- オークションスロットが現在空であったり、期限切れ、または最後のインターバルである場合、**最低入札価格**はAMMの総LPトークン残高の**0.001%**です。 +- オークションスロットが現在空であったり、期限切れ、または最後のインターバルである場合、**最低入札価格**は**AMMの総LPトークン残高の0.001%**です。 **注意:** この最小値は暫定値であり、AMM機能が最終的に完成する前に変更される可能性があります。 -- それ以外の場合、現在の保有者に競り勝つための価格は、以下の式で計算されます。 +- それ以外の場合、現在の保有者に落札価格は、以下の式で計算されます。 P = B × 1.05 × (1 - t⁶⁰) + M - - `P`: 競り落とすための価格。単位はLPトークン。 + - `P`: 落札価格。単位はLPトークン。 - `B`: 現在の入札価格。単位はLPトークン。 - `t`: 現在の24時間枠で経過した時間の割合。0.05の倍数に切り捨てられる。 - - `M`: M`は上記で定義された**最低入札価格**。 + - `M`: Mは上記で定義された**最低入札価格**。 - 競り落とすためのコストには、2つの特殊なケースがあります。誰かが落札してから**最初の時間枠**では、その人を競り落とすための価格は、最低入札価格+既存の入札価格の5%アップとなります。 + 落札コストには、2つの特殊なケースがあります。誰かが落札してから**最初の時間枠**では、その落札価格は、最低入札価格+既存の入札価格の5%アップとなります。 P = B × 1.05 + M - スロットの**最後の時間枠**では、誰かを競り落とすためのコストは最低入札額のみです。 + スロットの**最後の時間枠**では、落札コストは最低入札額のみです。 P = M -**注記:** 台帳を作成する際に、ネットワーク上のすべてのサーバーが同じ結果になるように、時間の計測は前回のレジャーの[正規の閉鎖時刻](ledger-close-times.html) に基づいており、これはおおよその目安の時間です。 +**注記:** レジャーを作成する際に、ネットワーク上のすべてのサーバーが同じ結果になるように、時間の計測は前回のレジャーの[正規の閉鎖時刻](ledger-close-times.html)に基づいており、これはおおよその目安の時間です。 ## 払い戻し -アクティブなオークションスロットを競り落とした場合、AMMは以下の計算式で前ホルダーに価格の一部を払い戻します。 +有効なオークションスロットを落札した場合、AMMは以下の計算式で前ホルダーに価格の一部を払い戻します。 ```text R = B × (1 - t) @@ -123,11 +123,12 @@ R = B × (1 - t) | エラーコード | 説明 | |:------------------------|:---------------------------------------------| -| `tecAMM_FAILED_BID` | このトランザクションでは、送信者が必要な入札額を支払うために十分なLPトークンを保有していないか、落札価格がトランザクションで指定された`BidMax`値より高いため、落札できませんでした。 | +| `tecAMM_EMPTY` | AMMのプールに資産がありません。この状態では、AMMを削除するか、新しい入金を行い資金を供給することしかできません。 | +| `tecAMM_FAILED` | このトランザクションでは、送信者が必要な入札額を支払うために十分なLPトークンを保有していないか、落札価格がトランザクションで指定された`BidMax`値より高いため、落札できませんでした。 | | `tecAMM_INVALID_TOKENS` | このトランザクションの送信者は、スロット価格に見合うだけのLPトークンを保有していません。 | -| `temBAD_AMM_TOKENS` | 指定された`BidMin`または`BidMax`は、このAMMの正しいLPトークンとして指定されていません。 | -| `temBAD_AMM_OPTIONS` | トランザクションが無効なオプションを指定しました。例えば、`AuthAccounts`のリストが長すぎるか、`BidMin`とBidMax` の両方を指定しています。 | -| `temDISABLED` | このネットワークでは、AMM機能 :not_enabled: は有効ではありません。 | +| `temBAD_AMM_TOKENS` | 指定された`BidMin`または`BidMax`は、このAMMの正しいLPトークンではありません。 | +| `temDISABLED` | このネットワークでは、AMM機能が有効ではありません。 | +| `temMALFORMED` | トランザクションが無効なオプションを指定しました。例えば、`AuthAccounts`のリストが長すぎるなど。 | | `terNO_ACCOUNT` | このリクエストで指定されたアカウントのいずれかが存在しません。 | | `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカーのインスタンスが存在しません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/ammcreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ammcreate.md similarity index 60% rename from content/references/protocol-reference/transactions/transaction-types/ammcreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ammcreate.md index 058d7c3fa0..ee4879aa95 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammcreate.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/ammcreate.md @@ -7,15 +7,15 @@ labels: status: not_enabled --- # AMMCreate -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMCreate.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMCreate.cpp "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ 資産([代替可能トークン](tokens.html)または[XRP](xrp.html))のペアを取引するための新しい[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスを作成します。 -AMMを表す[AMMオブジェクト][]と[特殊なAccountRootオブジェクト](accountroot.html#ammの特殊なaccountrootオブジェクト)を作成します。また、両資産の開始残高の所有権を送信者から、作成された`AccountRoot`に移し、初期残高の流動性プロバイダトークン(LPトークン)をAMMアカウントから送信者に発行します。 +AMMを表す[AMMエントリ][]と[特殊なAccountRootエントリ](accountroot.html#ammの特殊なaccountrootエントリ)を作成します。また、両資産の開始残高の所有権を送信者から、作成された`AccountRoot`に移し、初期残高の流動性プロバイダトークン(LPトークン)をAMMアカウントから送信者に発行します。 -**注意:** AMMを作成する際には、各資産を(ほぼ)同額ずつ投入する必要があります。そうしないと、他のユーザーがあなたの負担において、このAMMを使った取引で利益を得ることができます([アービトラージの実行](https://www.machow.ski/posts/an_introduction_to_automated_market_makers/#price-arbitrage))。流動性供給者が負う通貨リスクは、資産ペアのボラティリティ(不均衡の可能性)が高ければ高いほど、大きくなります。取引手数料が高いほど、このリスクを相殺することになりますので、資産ペアのボラティリティに応じて取引手数料を設定するとよいでしょう。 +**注意:** AMMを作成する際には、各資産を(ほぼ)同額ずつ投入する必要があります。そうしないと、他のユーザがこのAMMを使った取引で利益を得ることができ、あなたがその損失を被ることとなります([アービトラージの実行](https://www.machow.ski/posts/an_introduction_to_automated_market_makers/#price-arbitrage)。流動性プロバイダが負う通貨リスクは、資産ペアのボラティリティ(不均衡の可能性)が高ければ高いほど、大きくなります。取引手数料が高いほど、このリスクを相殺することになりますので、資産ペアのボラティリティに応じて取引手数料を設定するとよいでしょう。 ## {{currentpage.name}} JSONの例 @@ -36,8 +36,7 @@ AMMを表す[AMMオブジェクト][]と[特殊なAccountRootオブジェクト] } ``` -{% include '_snippets/tx-fields-intro.md' %} - +{% include '_snippets/tx-fields-intro.ja.md' %} | フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | |:-------------|:---- -----|:-----------|:------|:------------| @@ -45,7 +44,11 @@ AMMを表す[AMMオブジェクト][]と[特殊なAccountRootオブジェクト] | `Amount2` | [通貨額][] | Amount | はい | このAMMの最初の資金となる2つの資産のうち、2つ目の資産です。これは正数である必要があります。 | | `TradingFee` | 数値 | UInt16 | はい | このAMMインスタンスに対する取引に課される手数料を1/100,000単位で指定します(値1は0.001%に相当)。最大値は`1000`で、1%の手数料を意味します。最小値は `0`です。 | -`Amount`と`Amount2`の一方または両方は[tokens](tokens.html)であり、最大でどちらか一方を[XRP](xrp.html)にすることが可能です。通貨コードと発行者が同じものは使用できません。AMMのLPトークンは、別のAMMの資産の1つとして使用することができます。 +`Amount`と`Amount2`の一方または両方は[トークン](tokens.html)であり、最大でどちらか一方を[XRP](xrp.html)にすることが可能です。通貨コードと発行者が同じものは使用できません。AMMのLPトークンは、別のAMMの資産の1つとして使用することができます。トークンの発行者は[Default Ripple](rippling.html#defaultrippleフラグ)を有効にしていなければなりません。[Clawback Amendment][] :not_enabled: が有効になっている場合、それらの発行者はAllow Clawbackフラグを有効にしていてはいけません。AMMのLPトークンは、別のAMMの資産の一つとして使用することができます。 + +## 特殊なトランザクションコスト + +各AMMインスタンスはAccountRootレジャーエントリ、AMMレジャーエントリ、プール内の各トークンのトラストラインを含むため、AMMCreateトランザクションは台帳スパムを抑止するために通常よりもはるかに高い[トランザクションコスト][]を必要とします。標準的な最低0.00001XRPの代わりに、AMMCreateは少なくとも所有者準備金の増分(現在は2XRP)を破棄しなければなりません。これは[AccountDeleteトランザクション][]と同じ特別なトランザクションコストです。 ## エラーケース diff --git a/content/@i18n/ja/references/protocol/transactions/types/ammdelete.md b/content/@i18n/ja/references/protocol/transactions/types/ammdelete.md new file mode 100644 index 0000000000..0801d66a00 --- /dev/null +++ b/content/@i18n/ja/references/protocol/transactions/types/ammdelete.md @@ -0,0 +1,59 @@ +--- +html: ammdelete.html +parent: transaction-types.html +blurb: 空のプールを持つ自動マーケットメーカーのインスタンスを削除します。 +labels: + - AMM +status: not_enabled +--- +# AMMDelete +[[ソース]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/app/tx/impl/AMMDelete.cpp "Source") + +_([AMM amendment][] :not_enabled: が必要です)_ + +自動で削除しきれなかった空の[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスを削除します。 + +通常、[AMMWithdraw トランザクション][]は、AMMのプールからすべての資産を引き出すと、AMMと関連するすべてのレジャーエントリを自動的に削除します。ただし、AMMアカウントへのトラストラインが多すぎて1回のトランザクションで削除できない場合は、AMMの削除を行わない場合があります。しかしこの場合でも、AMMDeleteトランザクションは最大512のトラストラインを削除します。すべてのトラストラインとそのAMMを削除するには、数回のAMMDeleteトランザクションが必要な場合があります。いずれの場合も、AMMとAccountRootのレジャーエントリが削除されるのは、最後のトランザクションのみです。 + + +## {{currentpage.name}} JSONの例 + +```json +{ + "Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm", + "Asset" : { + "currency" : "XRP" + }, + "Asset2" : { + "currency" : "TST", + "issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd" + }, + "Fee" : "10", + "Flags" : 0, + "Sequence" : 9, + "TransactionType" : "AMMDelete" +} +``` + +{% include '_snippets/tx-fields-intro.ja.md' %} + +| フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | +|:---------|:-----------|:-----------|:------|:----| +| `Asset` | オブジェクト | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | +| `Asset2` | オブジェクト | STIssue | はい | AMMのプールにあるもう一つの資産を定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトです(XRPの場合は`issuer`を省略)。 | + + +## エラーケース + +AMMCreateトランザクションでは、すべてのトランザクションで発生する可能性のあるエラーの他に、以下の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。 + +| エラーコード | 説明 | +|:--------------------|:---------------------------------------------| +| `tecAMM_NOT_EMPTY` | AMMが空でないため、削除することができません。AMMの流動性プロバイダーの一人である場合は、まず[AMMWithdraw][]を使用してください。 | +| `tecINCOMPLETE` | 関連するレジャーエントリを可能な限り削除しましたが、AMM は完全には削除されませんでした。別の AMMDelete トランザクションを送信して、作業を続行し、完了させることができます。 | +| `terNO_AMM` | 指定したAMMが存在しません。(すでに削除されているか、指定したAMMの資産が間違っている可能性があります)。| + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/references/protocol-reference/transactions/transaction-types/ammdeposit.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ammdeposit.md similarity index 64% rename from content/references/protocol-reference/transactions/transaction-types/ammdeposit.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ammdeposit.md index 5ddbc72ab4..868894853f 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammdeposit.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/ammdeposit.md @@ -1,17 +1,17 @@ --- html: ammdeposit.html parent: transaction-types.html -blurb: LPTokenと引き換えに、自動マーケットメーカーに資金を預けます。 +blurb: 自動マーケットメーカーに資金を預け、LPTokenを受け取ります。 labels: - AMM status: not_enabled --- # AMMDeposit -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMDeposit.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMDeposit.cpp "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ -[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスに資金を預け、引き換えにAMMの流動性プロバイダートークン( _LPトークン_ )を受け取ります。AMMのプールにある資産の一方または両方を預けることができます。 +[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスに資金を預け、AMMの流動性プロバイダートークン( _LPトークン_ )を受け取ります。AMMのプールにある資産の一方または両方を預けることができます。 トランザクションが成功すると、LPトークンを保持するためにAMMアカウント(リミット0)に[トラストライン](trust-lines-and-issuing.html)が作成されます。 @@ -54,17 +54,18 @@ _([AMM amendment][] :not_enabled:が必要。)_ ### AMMDepositモード -このトランザクションには5つのモードがあり、どのフラグを指定するかで定義されます。それぞれのモードは、特定のフィールドの組み合わせを必要とし、次の2つのカテゴリーに分類されます。 +このトランザクションには5つのモードがあり、どのフラグを指定するかで定義されます。それぞれのモードは、特定のフィールドの組み合わせを必要とし、次の2つのカテゴリに分類されます。 -- **ダブルアセット入金**: AMMのプールにある両方(2つ)の資産を、既存の資産の残高に比例して預けます。この預け入れは手数料の対象外です。 -- **シングルアセット入金**, AMMの2つの資産のうち1つだけを預けます。AMMは、この預け入れによってプール内の資産残高がどれだけ変化したかによって、対価として支払われるLPトークンから差し引く手数料を設定します。 +- **ダブルアセット入金**: AMMのプールにある両方(2つ)の資産を、既存の資産の残高に比例して預けます。この預け入れでは手数料は徴収されません。 +- **シングルアセット入金**: AMMの2つの資産のうち1つだけを預けます。AMMは、この預け入れによってプール内の資産残高がどれだけ変化したかによって、対価として支払われるLPトークンから差し引く手数料を設定します。 以下の項目の組み合わせは、**ダブルアセット入金**について示しています。 | フラグ名 | フラグ値 | 指定フィールド | 意味 | |--------------|--------------|------------------------|---------| -| `tfLPToken` | `0x00010000` | `LPTokenOut`のみ | 指定された量のLPトークンを受け取るように計算された金額の、このAMMの両資産を預けます。預ける金額は、AMMの保有する2つの資産の割合と等しくなります。 | -| `tfTwoAsset` | `0x00100000` | `Amount`と`Amount2` | このAMMの両資産を指定された金額まで預けます。実際に預ける金額は、AMMがすでに保有している資産と同じ割合を維持する必要があるため、どちらか一方の預け入れ金額が指定金額より少なくてもかまいません。引き換えに得られるLPトークンの金額は、預けた金額の合計に基づきます。 | +| `tfLPToken` | `0x00010000` | `LPTokenOut`のみ | 指定された量のLPトークンを受け取るようにこのAMMの2つの資産を預けます。預ける金額は、AMMの保有する2つの資産の割合と等しくなります。 | +| `tfTwoAsset` | `0x00100000` | `Amount`と`Amount2` | このAMMの両資産を指定した金額まで預けます。実際に預ける金額は、AMMがすでに保有している資産と同じ割合を維持する必要があるため、どちらか一方の預け入れ金額が指定金額より少なくてもかまいません。得られるLPトークンの金額は、預けた金額の合計から算出されます。 | +| `tfTwoAssetIfEmpty` | `0x00800000` | `Amount`と`Amount2` | プールが空のAMMに、このAMMの資産を指定した金額預け入れます。得られるLPトークンの量は、預け入れた合計額から算出されます。 | 以下の項目の組み合わせは、**シングルアセット入金**について示しています。 @@ -77,15 +78,17 @@ _([AMM amendment][] :not_enabled:が必要。)_ これ以外のフィールドとフラグの組み合わせは無効です。 -### シングルアセット入金手数料 +### シングルアセット入金の手数料 - シングルアセット入金の手数料は、AMMを使って預け入れ金額の一部を他の資産と交換し、ダブルアセット入金を行った場合と同じになるように計算されます。AMMの取引手数料は、取引に必要な金額には適用されますが、残りの預け入れ金額には適用されません。 _例えば、AMMの資産プールがUSDとEURで完全に均等に分割されている場合、100USDを預けようとすると、受け取るLPトークンの量は、50EUR+50USDを預けた場合よりもわずかに少なくなります。_ + シングルアセット入金の手数料は、AMMを使って預け入れ金額の一部を他の資産と交換し、結果的にダブルアセット入金を行った場合と同じになるように計算されます。AMMの取引手数料は、一部の資産の交換に必要な金額には適用されますが、残りの預け入れ金額には適用されません。 _例えば、AMMの資産プールがUSDとEURで完全に均等に分割されている場合、100USDを預けようとすると、受け取るLPトークンの量は、50EUR+50USDを預けた場合よりもわずかに少なくなります。_ ダブルアセット入金の場合、LPトークンを受け取る数は、以下の計算式で算出できます。 {{ include_svg("img/amm-single-asset-deposit-formula.svg", "L = T × ( (( 1 + (B - (F × (1 - W) × B)) ÷ P)^W) - 1)") }} + + - `L`: 受け取るLPトークンの量 - `T`: 預け入れ前のLPトークンの残高合計 - `B`: 預け入れ資産の額 @@ -93,9 +96,16 @@ _([AMM amendment][] :not_enabled:が必要。)_ - `W`: プール内の預金資産の重みです。これはすべてのAMMプールで0.5と定義されています(50/50の分割を意味します)ので、Wによる累乗は平方根を取ることと同一です。 - `P`: 預け入れ前のプール内の預金資産の合計額 -### AMMDepositフラグ -AMMDepositタイプのトランザクションは、以下のように[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)の値を追加でサポートしています。 +### 空のAMMの場合の特殊なケース + +場合によっては、プール内に資産がない状態で AMM が存在することがあります。このような状態の AMM には通常の入金を行うことができません。なぜなら資産間の比率が未定義 (0/0) だからです。その代わりに、フラグ `tfTwoAssetIfEmpty` と両方の資産の正確な金額を指定した“空AMM”への特殊な入金を行うことができます。これはAMMを作成する[AMMCreateトランザクション][]が行うのと同じように、資産間の比率を直接設定します。ダブルアセット入金と同様に、これは手数料を徴収されません。 + +AMMが空の場合のみ、「空のAMM」への特別な入金を行うことができます。 + +### AMMDepositのフラグ + +AMMDepositトランザクションは、以下のような[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)の値をサポートしています。 | フラグ名 | 16進数値 | 10進数値 | 説明 | |:--------------------|:-------------|:--------------|:----------------------| @@ -104,27 +114,26 @@ AMMDepositタイプのトランザクションは、以下のように[`Flags` | `tfTwoAsset` | `0x00100000` | 1048576 | 両資産を指定金額で預けるダブルアセット入金を行います。 | | `tfOneAssetLPToken` | `0x00200000` | 2097152 | シングルアセット入金を行い、指定された額のLPトークンを受け取ります。 | | `tfLimitLPToken` | `0x00400000` | 4194304 | 有効価格を指定して、シングルアセット入金を行います。 | +| `tfTwoAssetIfEmpty` | `0x00800000` | 8388608 | 空のプールを持つAMMに特別なダブルアセット入金を行います。 | -これらのフラグのうちの **1つのみ** と、任意の[グローバルフラグ](transaction-common-fields.html#グローバルフラグ)を指定する必要があります。 +これらのフラグのうちの**1つのみ**と、任意の[グローバルフラグ](transaction-common-fields.html#グローバルフラグ)を指定する必要があります。 ## エラーケース すべてのトランザクションで発生する可能性のあるエラーに加えて、{{currentpage.name}}トランザクションでは、次の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。 - | エラーコード | 説明 | |:------------------------|:---------------------------------------------| -| `temBAD_AMM_OPTIONS` | トランザクションで無効なフィールドの組み合わせが指定されました。詳細は、[AMMDepositモード](#ammdepositモード)を参照してください。 | -| `tecFROZEN` | トランザクションは[凍結](freezes.html)されているトークンを預けようとしました。 | -| `tecAMM_BALANCE` | AMMが預け入れを行うのに十分な量の資産を保有していない(たとえば、シングルアセット入金に必要な残高を保有していない)、または送信者が指定されたトークンを十分に保有していない場合など。 | -| `temBAD_AMM_TOKENS` | トランザクションでLPトークンが正しく指定されています。例えば、`issuer`がAMMのAccountRootアドレスでない、`currency`がこのAMMのLPトークンの通貨コードでない、またはトランザクションがAssetフィールドのいずれかにこのAMMのLPトークンを指定した、など。 | -| `tecAMM_FAILED_DEPOSIT` | 預け入れの条件が成立しませんでした。例えば、`EPrice`フィールドに指定された実効価格が低すぎる場合など。 | -| `tecAMM_INVALID_TOKENS` | このトークンペアのAMMが存在しないか、計算の結果、預け入れ金額がゼロに丸められました。 | +| `tecAMM_EMPTY` | 現在、AMM は資産を保有していないため、通常の入金はできません。代わりに、空のAMMの場合の特殊な入金を行う必要があります。 | +| `tecAMM_NOT_EMPTY` | The transaction specified `tfTwoAssetIfEmpty`, but the AMM was not empty. | +| `tecAMM_FAILED` | 預け入れの条件が成立しませんでした。例えば、`EPrice`フィールドに指定された実効価格が低すぎる場合など。 | +|| `tecFROZEN` | トランザクションは[凍結](freezes.html)されているトークンを預けようとしました。 | | `tecINSUF_RESERVE_LINE` | このトランザクションの送信者は、この処理による[準備金要件](reserves.html)の増加の対象であり、LPトークンを保持するための新しいトラストラインが必要で、そのための追加の所有者準備金分のXRPを保有していないためと思われます。 | -| `tecNO_AUTH` | 送信者は、預け入れ資産のいずれかを保有する権限を持っ ていません。 | -| `tecNO_LINE` | 送信者が預け入れ資産のうち1つに対し、トラストラインを保有していません。 | | `tecUNFUNDED_AMM` | 送信者の残高が、指定された預け入れを行うのに十分な量ではありません。 | +| `temBAD_AMOUNT` | トランザクションで指定された金額が無効です。例えば、金額がマイナスなど。 | +| `temBAD_FEE` | トランザクションで指定された手数料の値が無効です。例えば、取引手数料が許容範囲外など。 | +| `temMALFORMED` | トランザクションで無効なフィールドの組み合わせが指定されました。詳細は、[AMMDepositモード](#ammdepositモード)を参照してください。 | | `terNO_ACCOUNT` | リクエストで参照されたいずれかのアカウントが存在しません。 | | `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカーインスタンスが存在しません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/ammvote.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ammvote.md similarity index 60% rename from content/references/protocol-reference/transactions/transaction-types/ammvote.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ammvote.md index 511173cfb6..bc08d812bd 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammvote.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/ammvote.md @@ -1,17 +1,17 @@ --- html: ammvote.html parent: transaction-types.html -blurb: 自動マーケットメーカーインスタンスの取引手数料を投票する。 +blurb: 自動マーケットメーカーインスタンスの取引手数料へ投票する。 labels: - AMM status: not_enabled --- # AMMVote -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMVote.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMVote.cpp "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ -[自動マーケットメーカー](automated-market-makers.html)インスタンスの取引手数料を投票します。最大8つのアカウントが、保有するAMMのLPトークンの量に比例して投票することができます。各新規投票では、投票の加重平均に基づいてAMMの取引手数料が再計算されます。 +[自動マーケットメーカー](automated-market-makers.html)インスタンスの取引手数料を投票します。最大8つのアカウントが、保有するAMMのLPトークンの量に比例して投票することができます。投票を行うごとには、投票の加重平均に基づいてAMMの取引手数料が再計算されます。 ## {{currentpage.name}} JSONの例 @@ -35,11 +35,11 @@ _([AMM amendment][] :not_enabled:が必要。)_ {% include '_snippets/tx-fields-intro.ja.md' %} -| フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | -|:-------------|:----------|:-----------|:-----|:------------| -| `Asset` | Object | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency` と `issuer` フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | -| `Asset2` | Object | STIssue | はい | AMMのプールにあるもう一つの資産を定義します。JSONでは、`currency` と `issuer` フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。| -| `TradingFee` | Number | UInt16 | はい | 投票に必要な手数料を100000の1の単位で指定します。最大値は1000で、1%の手数料を表します。 | +| フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | +|:-------------|:-----------|:-----------|:-----|:------------| +| `Asset` | オブジェクト | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | +| `Asset2` | オブジェクト | STIssue | はい | AMMのプールにあるもう一つの資産を定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。| +| `TradingFee` | 数値 | UInt16 | はい | 投票に必要な手数料を1/100,000の単位で指定します。最大値は1000で、1%の手数料を表します。 | ## エラーケース @@ -47,9 +47,9 @@ _([AMM amendment][] :not_enabled:が必要。)_ | エラーコード | 説明 | |:------------------------|:---------------------------------------------| +| `tecAMM_EMPTY` | AMMのプールに資産がありません。この状態では、AMMを削除するか、新しい入金を行い資金を供給することしかできません。 | | `tecAMM_INVALID_TOKENS` | 送信者は、このAMMのLPトークンを保有していないため、投票することができません。 | | `tecAMM_FAILED_VOTE` | このトランザクションの送信者よりも多くのLPトークンを保有しているアカウントからの投票が既に8件存在しています。 | -| `terNO_ACCOUNT` | このトランザクションで指定されたアカウントが存在しません。 | | `temBAD_FEE` | このトランザクションの`TradingFee`は正しくありません。 | | `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカー インスタンスが存在しません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/ammwithdraw.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ammwithdraw.md similarity index 66% rename from content/references/protocol-reference/transactions/transaction-types/ammwithdraw.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ammwithdraw.md index e824ea4354..857d9a3904 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammwithdraw.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/ammwithdraw.md @@ -1,17 +1,17 @@ --- html: ammwithdraw.html parent: transaction-types.html -blurb: LPTokenを自動マーケットメーカーに返却し、プールが保有する資産の一部と引き換える。 +blurb: LPトークを自動マーケットメーカーに返却し、プールが保有する資産の一部と引き換えマス。 labels: - AMM status: not_enabled --- # AMMWithdraw -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMWithdraw.cpp "Source") +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/AMMWithdraw.cpp "Source") -_([AMM amendment][] :not_enabled:が必要。)_ +_([AMM amendment][] :not_enabled:が必要です。)_ -AMMの流動性プロバイダトークン(LPトークン)を返すことで、[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスから資産を引き出します。 +AMMの流動性プロバイダトークン(LPトークン)を返却することで、[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスから資産を引き出します。 ## {{currentpage.name}} JSONの例 @@ -38,7 +38,7 @@ AMMの流動性プロバイダトークン(LPトークン)を返すことで } ``` -{% include '_snippets/tx-fields-intro.md' %} +{% include '_snippets/tx-fields-intro.ja.md' %} | フィールド | JSONの型 | [内部の型][] | 必須? | 説明 | |:-------------|:-----------|:-----------|:------|:------------| @@ -53,40 +53,43 @@ AMMの流動性プロバイダトークン(LPトークン)を返すことで ### AMMWithdrawモード -このトランザクションには、指定するフラグによって、いくつかのモードがあります。それぞれのモードは、特定のフィールドの組み合わせを必要とし、以下の2つのカテゴリーに分類されます。 +このトランザクションには、指定するフラグによっていくつかのモードがあります。それぞれのモードは、特定のフィールドの組み合わせを必要とし、以下の2つのカテゴリに分類されます。 -- **ダブルアセット出金**: AMMのプールから両方の資産を、その残高と同じ割合で受け取ります。これらの引き出しには手数料はかかりません。 -- **シングルアセット出金**: AMMのプールから1つの資産を受け取ります。AMMは、あなたの引き出しによってプール内の資産残高がどれだけ変動するかによって手数料を設定します。引き出しのモードによって、手数料の額は、支払われたLPトークンの量から差し引かれるか、引き出される資産の量から差し引かれるか決まります。 +- **ダブルアセット出金**: AMMのプールから両方の資産をその残高と同じ割合で受け取ります。この出金には手数料はかかりません。 +- **シングルアセット出金**: AMMのプールから1つの資産を受け取ります。AMMは、出金によりプール内の資産残高がどれだけ変動するかによって手数料を算出します。出金のモードによって、手数料が支払われたLPトークンの量から差し引かれるか、出金する資産の量から差し引かれるか決まります。 以下の項目の組み合わせは、**ダブルアセット出金**について示しています。 | フラグ名 | フラグ値 | 指定フィール | 意味 | |-----------------|--------------|---------------- ----|---------| -| `tfLPToken` | `0x00010000` | `LPTokenIn`のみ | 指定された量のLPトークンを返還し、AMMのプールから、LPトークンの発行総数に対する返還されたトークンの割合に基づく金額の両資産を受 け取ります。 | -| `tfWithdrawAll` | `0x00020000` | なし | LPトークンを _全て_ 返還し、AMMのプールにある両資産を最大限受け取ります。 | -| `tfTwoAsset` | `0x00100000` | `Amount`と`Amount2` | AMMの資産を、指定した金額を上限として、両方とも引き出します。実際に受け取る金額は、AMMのプールの資産残高の割合と同じになります。 | +| `tfLPToken` | `0x00010000` | `LPTokenIn`のみ | 指定された量のLPトークンを返却し、LPトークンの発行総数に対する返却されたトークンの割合に基づく金額の両方の資産を受け取ります。 | +| `tfWithdrawAll` | `0x00020000` | なし | LPトークンを _全て_ 返却し、AMMのプールにある両方の資産を最大限受け取ります。 | +| `tfTwoAsset` | `0x00100000` | `Amount`と`Amount2` | 指定した金額を上限として、AMMの資産の両方を出金します。実際に受け取る金額は、AMMのプールの資産残高の割合と同じになります。 | 以下の項目の組み合わせは、**シングルアセット出金**について示しています。 | フラグ名 | フラグ値 | 指定フィールド | 意味 | |-------------------------|--------------|-----------------------|---------| -| `tfSingleAsset` | `0x00080000` | `Amount`のみ | LPトークンを必要な数だけ返還し、1つの資産を指定した量だけ出金する。 | -| `tfOneAssetWithdrawAll` | `0x00040000` | `Amount`のみ | LPトークンを全て返還することで、1つの資産を指定した金額以上引き出します。指定された金額以上を受け取ることができない場合は失敗します。指定する金額は0でもかまいません。この場合、少しでも正の金額を引き出せば成功します。 | -| `tfOneAssetLPToken` | `0x00200000` | `Amount`と`LPTokenIn` | 指定した量のLPトークンを返還することで、1つの資産を指定した量まで引き出します。 | +| `tfSingleAsset` | `0x00080000` | `Amount`のみ | LPトークンを指定した数だけ返却し、1つの資産を指定した量だけ出金します。 | +| `tfOneAssetWithdrawAll` | `0x00040000` | `Amount`のみ | LPトークンを全て返却することで、1つの資産を指定した金額以上出金します。指定された金額以上を受け取ることができない場合は失敗します。指定する金額は0でもかまいません。この場合、少しでも正の金額を出金できれば成功します。 | +| `tfOneAssetLPToken` | `0x00200000` | `Amount`と`LPTokenIn` | 指定した量のLPトークンを返却することで、1つの資産を指定した量まで出金します。 | | `tfLimitLPToken` | `0x00400000` | `Amount`と`EPrice` | 指定した1つの資産の量を上限として出金しますが、受け取る資産の一単位あたりのLPトークンで指定した有効価格より高い金額を支払うことはありません。 | これら以外のフィールドとフラグの組み合わせは無効です。 ### シングルアセット出金手数料 -シングルアセット出金にかかる手数料は、ダブルアセット出金を行い、AMMを使用してもう一方の資産を全て引き出しにかかる資産と交換した場合と同じになるように計算されます。取引手数料は、取引に必要な金額に適用されますが、残りの引き出し分には適用されません。 +シングルアセット出金にかかる手数料は、ダブルアセット出金を行い、AMMを使用して指定しない方の資産を全て交換する場合と同じになるように計算されます。取引手数料は、交換に必要な金額に適用されますが、残りの出金分には適用されません。 +### AMMの削除 -### AMMWithdrawフラグ +トランザクションがAMMに存在する全ての資産を出金すると、AMMは関連するすべてのトラストラインとともに自動的に削除されます。ただし、1回のトランザクションで削除できるトラストラインの数には制限があります。トラストラインが多すぎる場合、AMMは空の状態でレジャーに残ります。これは[AMMDelete トランザクション][]で削除するか、「空のAMM」に対する特別なダブルアセット入金([AMMDeposit トランザクション][])で補充することができます。AMMが空の間は、そのAMMに対する他の操作は無効です。 -AMMWithdrawタイプのトランザクションは、以下のように[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)の値を追加でサポートしています。 +### AMMWithdrawのフラグ + +AMMWithdrawトランザクションは、以下のように[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)の値をサポートしています。 | フラグ名 | 16進数値 | 10進数値 | 説明 | |:------------------------|:-------------|:--------------|:----------------------| @@ -107,13 +110,14 @@ AMMWithdrawタイプのトランザクションは、以下のように[`Flags` | エラーコード | 説明 | |:-------------------------|:---------------------------------------------| -| `tecFROZEN` | トランザクションは[凍結](freezes.html)されたトークンを引き出そうとしました。 | +| `tecAMM_EMPTY` | AMMのプールに資産がありません。この状態では、AMMを削除するか、新しい入金を行い資金を供給することしかできません。 | | `tecAMM_BALANCE` | トランザクションによって、プールから1つの資産をすべて引き出そうとしている、もしくは`tfWithdrawAll`の場合に端数処理によって0以外の金額が残ってしまっています。 | -| `tecAMM_FAILED_WITHDRAW` | 例えば、`EPrice`フィールドに指定された有効価格が低過ぎる場合など、引き出しに関する条件が成立しませんでした。 | +| `tecAMM_FAILED` | 例えば、`EPrice`フィールドに指定された有効価格が低過ぎる場合など、出金に関する条件が成立しませんでした。 | | `tecAMM_INVALID_TOKENS` | トークンペアのAMMが存在しないか、計算の結果、引き出し額がゼロに丸められました。 | +| `tecFROZEN` | トランザクションは[凍結](freezes.html)されたトークンを引き出そうとしました。 | | `tecINSUF_RESERVE_LINE` | トランザクションの送信者は、このトランザクションを処理するための[準備金要件](reserves.html)の増加に対応できません。おそらく、引き出される資産の1つを保持するために少なくとも1つの新しいトラストラインが必要ですが、新しいトラストラインのための追加の所有者準備金分のXRPを持っていないためでしょう。 | | `tecNO_AUTH` | 送信者は、引き出し資産のいずれかを保有する権限を有していません。 | -| `temBAD_AMM_OPTIONS` | トランザクションで無効なフィールドの組み合わせが指定されました。[AMMWithdrawモード](#ammwithdrawモード)を参照してください。 | +| `temMALFORMED` | トランザクションで無効なフィールドの組み合わせが指定されました。[AMMWithdrawモード](#ammwithdrawモード)を参照してください。 | | `temBAD_AMM_TOKENS` | 例えば、`issuer`がAMMの関連するAccountRootアドレスでない、`currency`がこのAMMのLPトークンの通貨コードでない、またはトランザクションがこのAMMのLPトークンをAssetフィールドの1つに指定した、などです。 | | `terNO_AMM` | トランザクションで指定した資産ペアの自動マーケットメーカーインスタンスが存在しません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcancel.ja.md b/content/@i18n/ja/references/protocol/transactions/types/checkcancel.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/checkcancel.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/checkcancel.md diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcash.ja.md b/content/@i18n/ja/references/protocol/transactions/types/checkcash.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/checkcash.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/checkcash.md diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/checkcreate.md similarity index 95% rename from content/references/protocol-reference/transactions/transaction-types/checkcreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/checkcreate.md index 5dee91a334..0c1cd69fdd 100644 --- a/content/references/protocol-reference/transactions/transaction-types/checkcreate.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/checkcreate.md @@ -44,7 +44,7 @@ _([Checks Amendment][]が必要です)_ - `Destination`がトランザクションの送信者である場合、トランザクションは結果コード`temREDUNDANT`で失敗します。 - `Destination`[アカウント](accounts.html)がレジャーに存在していない場合、トランザクションは結果コード`tecNO_DST`で失敗します。 - `Destination`アカウントでRequireDestフラグが有効であるが、トランザクションに`DestinationTag`フィールドが含まれていない場合、トランザクションは結果コード`tecDST_TAG_NEEDED`で失敗します。 -- `SendMax`に[凍結](freezes.html)されている発行済み通貨が指定されている場合、トランザクションは結果コード`tecFROZEN`で失敗します。 +- `SendMax`に[凍結](freezes.html)されているトークンが指定されている場合、トランザクションは結果コード`tecFROZEN`で失敗します。 - トランザクションの`Expiration`が過去の日時である場合、トランザクションは結果コード`tecEXPIRED`で失敗します。 - Checkの追加後に送金元が[所有者準備金](reserves.html#所有者準備金)条件を満たすのに十分なXRPを保有していない場合、トランザクションは結果コード`tecINSUFFICIENT_RESERVE`で失敗します。 - Checkの送金元または送金先のいずれかがレジャーでこれ以上のオブジェクトを所有できない場合、トランザクションは結果コード`tecDIR_FULL`で失敗します。 diff --git a/content/@i18n/ja/references/protocol/transactions/types/clawback.md b/content/@i18n/ja/references/protocol/transactions/types/clawback.md new file mode 100644 index 0000000000..d175871ab4 --- /dev/null +++ b/content/@i18n/ja/references/protocol/transactions/types/clawback.md @@ -0,0 +1,55 @@ +--- +html: clawback.html +parent: transaction-types.html +blurb: 発行したトークンを取り戻します。 +labels: + - トークン +--- +# Clawback + +[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/Clawback.cpp "ソース") + +{% include '_snippets/clawback-disclaimer.ja.md' %} + +あなたのアカウントが発行したトークンを回収します。 + +Clawback機能はデフォルトで無効になっています。使用するには、[AccountSetトランザクション][]を送信して**Allow Trust Line Clawback**設定を有効にする必要があります。既存のトークンを持つ発行者はClawback機能を有効にできません。つまり、トラストライン、オファー、エスクロー、ペイメントチャネル、チェック、または署名者リストを設定する前に行う必要があります。Clawback機能を有効にした後、元に戻すことはできません:アカウントは永久にトラストラインで発行された資産を回収する権限を得ます。 + +## {{currentpage.name}} JSONの例 + +```json +{ + "TransactionType": "Clawback", + "Account": "rp6abvbTbjoce8ZDJkT6snvxTZSYMBCC9S", + "Amount": { + "currency": "FOO", + "issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "value": "314.159" + } +} +``` + +{% include '_snippets/tx-fields-intro.ja.md' %} + +| フィールド  | JSONの型 | [内部の型][] | 説明 | +|:-------------------|:----------|:------------|:----------| +| `Amount` | [通貨額][] | Amount | 回収する金額と、その金額を回収する相手を表します。`value`サブフィールドの回収する数量はゼロであってはなりません。これが現在の残高より多い場合、トランザクションは全残高を回収します。サブフィールド`Amount`内の`issuer`はトークン所有者のアカウントを表します。| + +このトランザクションを実行するアカウントは、回収する資産の発行者でなければなりません。XRP Ledgerでは、トラストラインは双方向であり、設定によっては双方が資産の*発行者*とみなされることに注意してください。この仕様において、*発行者*という用語は、未払い残高がある(つまり、発行された資産に"債務がある")トラストラインの側が、その資産を回収することを意味します。 + + +## エラーケース + +すべてのトランザクションで発生する可能性のあるエラーに加えて、{{currentpage.name}}トランザクションでは、次の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。 + +| エラーコード | 説明 | +|:-----------|:------------| +| `temDISABLED` | [Clawback amendment](known-amendments.html#clawback)が有効ではありません。 | +| `temBAD_AMOUNT` | 保有者の残高が0です。回収しようとする金額が保有者の残高を超えていてもエラーにはなりません。また、`Amount`に記載されている相手がこのトランザクションを発行している`Account`と同じ場合にもエラーが発生します。 | +| `tecNO-LINE` | 取引相手とのトラストラインがない、またはトラストラインの残高が0です。 | +| `tecNO-PERMISSION` | `lsfNoFreeze`が設定されているときに`lsfAllowTrustlineClawback`を設定、または`lsfAllowTrustLineClawback`が設定されているときに`lsfNoFreeze`を設定しようとしています。 | + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/references/protocol-reference/transactions/transaction-types/depositpreauth.ja.md b/content/@i18n/ja/references/protocol/transactions/types/depositpreauth.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/depositpreauth.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/depositpreauth.md index 363af9fbdf..4593832b94 100644 --- a/content/references/protocol-reference/transactions/transaction-types/depositpreauth.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/depositpreauth.md @@ -8,7 +8,7 @@ labels: # DepositPreauth [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/DepositPreauth.cpp "Source") -_[DepositPreauth Amendment][]が必要です。_ +_[DepositPreauth Amendment][]により追加されました。_ DepositPreauthトランザクションは別のアカウントに対し、このトランザクションの送信者に支払いを送金することを事前承認します。これは、このトランザクションの送信者が[Deposit Authorization](depositauth.html)を使用している(または使用する予定がある)場合にのみ有用です。 diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowcancel.ja.md b/content/@i18n/ja/references/protocol/transactions/types/escrowcancel.md similarity index 96% rename from content/references/protocol-reference/transactions/transaction-types/escrowcancel.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/escrowcancel.md index f56691a968..d9a74706b7 100644 --- a/content/references/protocol-reference/transactions/transaction-types/escrowcancel.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/escrowcancel.md @@ -9,7 +9,7 @@ labels: [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source") -_[Escrow Amendment][]が必要です。_ +_[Escrow Amendment][]により追加されました。_ Escrowに留保されているXRPを送金元に返金します。 diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowcreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/escrowcreate.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/escrowcreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/escrowcreate.md index d67a59aadd..e2745f2a08 100644 --- a/content/references/protocol-reference/transactions/transaction-types/escrowcreate.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/escrowcreate.md @@ -9,7 +9,7 @@ labels: [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source") -_[Escrow Amendment][]が必要です。_ +_[Escrow Amendment][]により追加されました。_ Escrowプロセスが終了または取り消されるまでXRPを隔離します。 diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowfinish.ja.md b/content/@i18n/ja/references/protocol/transactions/types/escrowfinish.md similarity index 77% rename from content/references/protocol-reference/transactions/transaction-types/escrowfinish.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/escrowfinish.md index 2b19cb175b..7cd7aed0b7 100644 --- a/content/references/protocol-reference/transactions/transaction-types/escrowfinish.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/escrowfinish.md @@ -9,7 +9,7 @@ labels: [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source") -_[Escrow Amendment][]が必要です。_ +_[Escrow Amendment][]により追加されました。_ 保留中の支払いから受取人へXRPを送金します。 @@ -45,7 +45,7 @@ _[Escrow Amendment][]が必要です。_ **注記:** EscrowFinishトランザクションにフルフィルメントが含まれている場合、このトランザクションを送信するための最小[トランザクションコスト](transaction-cost.html)が増加します。トランザクションにフルフィルメントが含まれていない場合、トランザクションコストは標準の10 dropです。トランザクションにフルフィルメントが含まれている場合、トランザクションコストは330 [XRP drop][XRPのdrop数]に加えて、プリイメージサイズの16バイトごとに更に10 dropです。 -[本番環境以外のネットワーク](parallel-networks.html)では、保留中のescrowの送金先アカウントを[削除](accounts.html#アカウントの削除)できる場合があります。この場合、 escrowを終了しようとしても結果`tecNO_TARGET`で失敗しますが、 escrowオブジェクトは通常期限切れになる場合を除き、維持されます。別の支払いで送金先アカウントが再作成された場合、 escrowは正常に終了できます。escrowの送金先アカウントは、[fix1523 Amendment](known-amendments.html#fix1523)が有効になる前にescrowが作成された場合にのみ削除できます。本番環境の XRP Ledgerにはそのようなescrowは存在しないため、本番環境のXRP Ledgerではこのようなエッジケースには対応できません。また、このエッジケースは、fix1523とescrowのAmendmentを同時に有効にするテストネットワークでも不可能です。これは、[新しいジェネシスレジャーを開始](start-a-new-genesis-ledger-in-stand-alone-mode.html)するときのデフォルトです。 +[本番環境以外のネットワーク](parallel-networks.html)では、保留中のescrowの送金先アカウントを[削除](deleting-accounts.html)できる場合があります。この場合、 escrowを終了しようとしても結果`tecNO_TARGET`で失敗しますが、 escrowオブジェクトは通常期限切れになる場合を除き、維持されます。別の支払いで送金先アカウントが再作成された場合、 escrowは正常に終了できます。escrowの送金先アカウントは、[fix1523 Amendment](known-amendments.html#fix1523)が有効になる前にescrowが作成された場合にのみ削除できます。本番環境の XRP Ledgerにはそのようなescrowは存在しないため、本番環境のXRP Ledgerではこのようなエッジケースには対応できません。また、このエッジケースは、fix1523とescrowのAmendmentを同時に有効にするテストネットワークでも不可能です。これは、[新しいジェネシスレジャーを開始](start-a-new-genesis-ledger-in-stand-alone-mode.html)するときのデフォルトです。 {% include '_snippets/rippled-api-links.md' %} diff --git a/content/references/protocol-reference/transactions/transaction-types/transaction-types.ja.md b/content/@i18n/ja/references/protocol/transactions/types/index.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/transaction-types.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/index.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.ja.md b/content/@i18n/ja/references/protocol/transactions/types/nftokenacceptoffer.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/nftokenacceptoffer.md index 92acb51eb3..d78ad05b67 100644 --- a/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/nftokenacceptoffer.md @@ -86,11 +86,11 @@ _([NonFungibleTokensV1_1 amendment][]により追加されました)_ | エラーコード | 説明 | |:-----------------------------------|:----------------------------------------| -| `temDISABLED` | [NonFungibleTokensV1の修正][]は有効ではありません。 | +| `temDISABLED` | [NonFungibleTokensV1 Amendment][]は有効ではありません。 | | `temMALFORMED` | トランザクションのフォーマットが正しくありません。たとえば、`NFTokenSellOffer`と`NFTokenBuyOffer`のどちらも指定されていないか、`NFTokenBrokerFee`に負の値が指定されています。| | `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | 購入者と販売者が同じアカウントになっています。 | | `tecEXPIRED` | トランザクションで指定されたオファーの有効期限が既に切れています。 | -| `tecINSUFFICIENT_FUNDS` | 購入者が申し出た金額を全額持っていない。購入額がXRPで指定されている場合、[所有者準備金](reserves.html)が原因である可能性があります。購入額が発行済み通貨である場合、トークンが[凍結](freezes.html) されていることが原因と考えられます。 | +| `tecINSUFFICIENT_FUNDS` | 購入者が申し出た金額を全額持っていない。購入額がXRPで指定されている場合、[所有者準備金](reserves.html)が原因である可能性があります。購入額がトークンである場合、トークンが[凍結](freezes.html) されていることが原因と考えられます。 | | `tecINSUFFICIENT_PAYMENT` | ブローカーモードにおいて、提示された購入額は、`BrokerFee` _および_ `NFToken`の売却コストを支払うには十分な額ではありません。 | | `tecOBJECT_NOT_FOUND` | トランザクションで指定されたオファーがレジャーに存在しません。 | | `tecNFTOKEN_BUY_SELL_MISMATCH` | ブローカーモードにおいて、2つのオファーが有効なマッチングではありません。例えば、販売者が購入者の提示額よりも高い金額を提示している、購入と売却のオファーが異なる通貨で提示されている、販売者が購入者や ブローカーとは異なる販売先を指定している、などです。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenburn.ja.md b/content/@i18n/ja/references/protocol/transactions/types/nftokenburn.md similarity index 96% rename from content/references/protocol-reference/transactions/transaction-types/nftokenburn.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/nftokenburn.md index 5cfd41fdd0..986d8db959 100644 --- a/content/references/protocol-reference/transactions/transaction-types/nftokenburn.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/nftokenburn.md @@ -42,7 +42,7 @@ _([NonFungibleTokensV1_1 amendment][]により追加されました)_ | エラーコード | 説明 | |:-------------------|:--------------------------------------------------------| -| `temDISABLED` | [NonFungibleTokensV1の修正][]は有効ではありません。 | +| `temDISABLED` | [NonFungibleTokensV1 Amendment][]は有効ではありません。 | | `tecNO_ENTRY` | 指定された `TokenID` が見つかりませんでした。 | | `tecNO_PERMISSION` | このアカウントにはトークンをBurnする権限がありません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.ja.md b/content/@i18n/ja/references/protocol/transactions/types/nftokencanceloffer.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/nftokencanceloffer.md index 520ec04ba5..c220374051 100644 --- a/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/nftokencanceloffer.md @@ -52,7 +52,7 @@ IDが[NFTokenOffer](nftokenoffer.html)オブジェクトでないオブジェク | エラーコード | 説明 | |:-------------------|:--------------------------------------------------------| -| `temDISABLED` | [NonFungibleTokensV1の修正][]は有効ではありません。 | +| `temDISABLED` | [NonFungibleTokensV1 Amendment][]は有効ではありません。 | | `temMALFORMED` | トランザクションが有効なフォーマットではありませんでした。たとえば、`NFTokenOffers`配列が空であるか、一度にキャンセルできるオファーの最大数を超える数を含んでいた場合です。 | | `tecNO_PERMISSION` | `NFTokenOffers`フィールドのIDのうち少なくとも1つが、キャンセルできないオブジェクトを参照しています。例えば、このトランザクションの送信者がオファーの所有者や`Destination`ではない場合や、オブジェクトが`NFTokenOffer`タイプのオブジェクトではなかった場合などです。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.ja.md b/content/@i18n/ja/references/protocol/transactions/types/nftokencreateoffer.md similarity index 85% rename from content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/nftokencreateoffer.md index a2d2a2447f..c35cb8025f 100644 --- a/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/nftokencreateoffer.md @@ -53,19 +53,19 @@ NFTokenCreateOfferタイプのトランザクションは、以下のように[` | エラーコード | 説明 | |:---------------------------------|:------------------------------------------| -| `temDISABLED` | [NonFungibleTokensV1の修正][]は有効ではありません。 | -| `temBAD_AMOUNT` | `Amount`フィールドが有効ではありません。例えば、購入オファーで金額がゼロであったり、金額は発行済み通貨であるが`NFToken`で[`lsfOnlyXRP`フラグ](nftoken.html#nftoken-フラグ)が有効になっている場合などです。 | +| `temDISABLED` | [NonFungibleTokensV1 Amendment][]は有効ではありません。 | +| `temBAD_AMOUNT` | `Amount`フィールドが有効ではありません。例えば、購入オファーで金額がゼロであったり、金額はトークンであるが`NFToken`で[`lsfOnlyXRP`フラグ](nftoken.html#nftoken-フラグ)が有効になっている場合などです。 | | `temBAD_EXPIRATION` | 指定された`Expiration`は無効です(例:`0`)。 | | `tecDIR_FULL` | 送信者がレジャーにすでにあまりにも多くのオブジェクトを所有しているか、またはこのトークンの売買のオファーがあまりにも多く存在しています。 | | `tecEXPIRED` | 指定された`Expiration`の時間は既に経過しています。 | -| `tecFROZEN` | `Amount`は発行済み通貨で、このオファーからトークンを受け取るトラストラインは[凍結](freezes.html)されています。これは売却者のトラストラインか、`NFToken`の発行者のトラストライン(`NFToken`に送金手数料がある場合)である可能性があります。 | +| `tecFROZEN` | `Amount`はトークンで、このオファーからトークンを受け取るトラストラインは[凍結](freezes.html)されています。これは売却者のトラストラインか、`NFToken`の発行者のトラストライン(`NFToken`に送金手数料がある場合)である可能性があります。 | | `tecINSUFFICIENT_RESERVE` | 送信者はこのオファーを提示した後、[所有者準備金](reserves.html)を満たすのに十分なXRPを持っていません。 | | `tecNO_DST` | `Destination`に指定されたアカウントがレジャーに存在しません。 | | `tecNO_ENTRY` | `NFToken`フィールドで指定したアカウントは所有していません。 | | `tecNO_ISSUER` | `Amount`フィールドで指定した発行者が存在しません。 | -| `tecNO_LINE` | `Amount`フィールドは発行済み通貨ですが、`NFToken`の発行者はそのトークンのトラストラインを持っておらず、`NFToken`は[`lsfTrustLine`フラグ](nftoken.html#nftoken-フラグ)が有効ではありません。 | +| `tecNO_LINE` | `Amount`フィールドはトークンですが、`NFToken`の発行者はそのトークンのトラストラインを持っておらず、`NFToken`は[`lsfTrustLine`フラグ](nftoken.html#nftoken-フラグ)が有効ではありません。 | | `tecNO_PERMISSION` | `Destination`アカウントが着信する NFTokenOffer をブロックします。 _([DisallowIncoming amendment][] :not_enabled: が必要です。)_ -| `tecUNFUNDED_OFFER` | 購入オファーの場合、送信者は`Amount`フィールドで指定された通貨を利用可能です。もし`Amount`がXRPである場合、これは準備不足によるものかもしれません。もし`Amount`が発行済み通貨である場合、これは[凍結](freezes.html)されている可能性があります。 | +| `tecUNFUNDED_OFFER` | 購入オファーの場合、送信者は`Amount`フィールドで指定された通貨を利用可能です。もし`Amount`がXRPである場合、これは準備不足によるものかもしれません。もし`Amount`がトークンである場合、これは[凍結](freezes.html)されている可能性があります。 | | `tefNFTOKEN_IS_NOT_TRANSFERABLE` | `NFToken`は[`lsfTransferable`フラグ](nftoken.html#nftoken-flags)が無効になっており、このトランザクションでは`NFToken`を発行者に転送したり発行者から転送したりすることはできません。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenmint.ja.md b/content/@i18n/ja/references/protocol/transactions/types/nftokenmint.md similarity index 91% rename from content/references/protocol-reference/transactions/transaction-types/nftokenmint.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/nftokenmint.md index 397c9f1135..03d101f708 100644 --- a/content/references/protocol-reference/transactions/transaction-types/nftokenmint.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/nftokenmint.md @@ -8,7 +8,7 @@ labels: # NFTokenMint [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/NFTokenMint.cpp "Source") -`NFTokenMint`トランザクションは非代替性トークンを作成し、`NFTokenMinter`に紐付く[NFTokenPageオブジェクト][]に[NFToken][]オブジェクトとして追加します。このトランザクションの必須パラメータは`Token`フィールドで、実際のトークンを指定します。このトランザクションは`NFTokenMinter`にとって、不変と定義されているトークンフィールド(例えば`Flags`)を設定することができる唯一の方法です。 +`NFTokenMint`トランザクションは非代替性トークンを作成し、`NFTokenMinter`に紐付く[NFTokenPageオブジェクト][]に[NFToken][]オブジェクトとして追加します。このトランザクションは`NFTokenMinter`にとって、不変と定義されているトークンフィールド(例えば`Flags`)を設定することができる唯一の方法です。 _([NonFungibleTokensV1_1 amendment][]により追加されました)_ @@ -37,6 +37,7 @@ _([NonFungibleTokensV1_1 amendment][]により追加されました)_ } ``` +[トランザクションを取得してみる >](websocket-api-tool.html?server=wss%3A%2F%2Fs1.ripple.com%2F&req=%7B%22id%22%3A%22example_NFTokenMint%22%2C%22command%22%3A%22tx%22%2C%22transaction%22%3A%22B42C7A0C9C3061463C619999942D0F25E4AE5FB051EA0D7A4EE1A924DB6DFEE8%22%2C%22binary%22%3Afalse%7D) {% include '_snippets/tx-fields-intro.ja.md' %} @@ -56,8 +57,8 @@ NFTokenMint型のトランザクションでは、以下のように[`Flags`フ | フラグ名 | 16進数値 | 整数値 | 説明 | |:--------------|:-------------|:--------------|:------------------------------| | `tfBurnable` | `0x00000001` | 1 | 発行者(または発行者が許可した者)が`NFToken`を破棄できるようにします。(`NFToken`の所有者は常に破棄することができます)。 | -| `tfOnlyXRP` | `0x00000002` | 2 | 発行された`NFToken`はXRPでのみ売買が可能です。これは、トークンに送金手数料がかかり、発行者がXRP以外の発行済み通貨で手数料を受け取りたくない場合に望ましいでしょう。 | -| `tfTrustLine` | `0x00000004` | 4 | **非推奨** 発行者が、発行した`NFToken`を転送する際に受け取る手数料を保有するために、自動的に[トラストライン](trust-lines-and-issuing.html) を作成します。[fixRemoveNFTokenAutoTrustLineの修正][]により、このフラグの設定は無効となります。 | +| `tfOnlyXRP` | `0x00000002` | 2 | 発行された`NFToken`はXRPでのみ売買が可能です。これは、トークンに送金手数料がかかり、発行者がXRP以外のトークンで手数料を受け取りたくない場合に望ましいでしょう。 | +| `tfTrustLine` | `0x00000004` | 4 | **非推奨** 発行者が、発行した`NFToken`を転送する際に受け取る手数料を保有するために、自動的に[トラストライン](trust-lines-and-issuing.html) を作成します。[fixRemoveNFTokenAutoTrustLine Amendment][]により、このフラグの設定は無効となります。 | | `tfTransferable` | `0x00000008` | 8 | 発行された`NFToken`は他の人に譲渡することができます。このフラグが _有効でない_ 場合、トークンは _発行者から_ 、または _発行者へ_ のみ転送することができます。 | @@ -105,7 +106,7 @@ NFTokenMint型のトランザクションでは、以下のように[`Flags`フ | エラーコード | 説明 | |:------------------------------|:---------------------------------------------| -| `temDISABLED` | [NonFungibleTokensV1の修正][]は有効ではありません。 | +| `temDISABLED` | [NonFungibleTokensV1 Amendment][]は有効ではありません。 | | `temBAD_NFTOKEN_TRANSFER_FEE` | `TransferFee`が許容範囲外です。 | | `temINVALID_FLAG` | `Flags`値には、許可されていない、または有効なフラグでないビットが有効になっています。[fixRemoveNFTokenAutoTrustLine amendment][]が有効になっている場合、`tfTrustLine`フラグはこのエラーを発生させます。| | `temMALFORMED` | トランザクションが正しく指定されていません。例えば、`URI`フィールドが256バイトより長い場合です。 | diff --git a/content/references/protocol-reference/transactions/transaction-types/offercancel.ja.md b/content/@i18n/ja/references/protocol/transactions/types/offercancel.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/offercancel.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/offercancel.md diff --git a/content/references/protocol-reference/transactions/transaction-types/offercreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/offercreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/offercreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/offercreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/payment.ja.md b/content/@i18n/ja/references/protocol/transactions/types/payment.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/payment.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/payment.md diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelclaim.ja.md b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelclaim.md similarity index 89% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelclaim.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/paymentchannelclaim.md index 0c6344104a..0c4ff8f164 100644 --- a/content/references/protocol-reference/transactions/transaction-types/paymentchannelclaim.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelclaim.md @@ -8,7 +8,7 @@ labels: # PaymentChannelClaim [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source") -_[PayChan Amendment][]が必要です。_ +_[PayChan Amendment][]により追加されました。_ Payment Channelに対しXRPを請求するか、Payment Channelの有効期限を調整するか、またはこの両方の操作を行います。このトランザクションは、指定されたChannelでのトランザクション送信者の役割に応じてさまざまに利用できます。 @@ -54,7 +54,7 @@ Channelの**宛先アドレス**は以下の操作を実行できます。 | `Signature` | 文字列 | Blob | _(省略可)_ クレームの署名です(16進数)。署名付きメッセージには、Channel IDとクレームの額が含まれています。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。 | | `PublicKey` | 文字列 | Blob | _(省略可)_ 署名に使用する公開鍵(16進数)。公開鍵はレジャーに保管されているこのChannelの`PublicKey`と一致している必要があります。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。また`Signature`フィールドは省略されます。(`rippled`がトランザクションをレジャーに適用する前に署名の有効性をチェックできるように、トランザクションにPubKeyが指定されています。) | -[DeletableAccounts Amendment](known-amendments.html#deletableaccounts)が有効であり、 _かつ_ Payment Channelの作成時に[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir)が有効でなかった場合は、Payment Channelの送金先が[削除](accounts.html#アカウントの削除)され、現在レジャーに存在しない可能性があります。宛先が削除されている場合、支払元アカウントはチャネルから宛先にXRPを送金できません。トランザクションは`tecNO_DST`で失敗します。(もちろん、削除されたアカウントがトランザクションを送信することはできません。)宛先アカウントが削除されている場合に、このトランザクションタイプを他の用途(チャネルの有効期限の調整、XRPのないチャネルのクローズ、有効期限を過ぎたチャネルの削除など)で使用しても影響はありません。 +[DeletableAccounts Amendment](known-amendments.html#deletableaccounts)が有効であり、 _かつ_ Payment Channelの作成時に[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir)が有効でなかった場合は、Payment Channelの送金先が[削除](deleting-accounts.html)され、現在レジャーに存在しない可能性があります。宛先が削除されている場合、支払元アカウントはチャネルから宛先にXRPを送金できません。トランザクションは`tecNO_DST`で失敗します。(もちろん、削除されたアカウントがトランザクションを送信することはできません。)宛先アカウントが削除されている場合に、このトランザクションタイプを他の用途(チャネルの有効期限の調整、XRPのないチャネルのクローズ、有効期限を過ぎたチャネルの削除など)で使用しても影響はありません。 ## PaymentChannelClaimフラグ diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelcreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelcreate.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelcreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/paymentchannelcreate.md index 0fd90f21f5..1e9834a60e 100644 --- a/content/references/protocol-reference/transactions/transaction-types/paymentchannelcreate.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelcreate.md @@ -8,7 +8,7 @@ labels: # PaymentChannelCreate [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "ソース") -_[PayChan Amendment][]が必要です。_ +_[PayChan Amendment][]により追加されました。_ [ペイメントチャンネル](payment-channels.html)を作成し、XRPで資金を供給します。このトランザクションを送信するアドレスが、ペイメントチャネルの「送信元アドレス」となります。 diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelfund.ja.md b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelfund.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelfund.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/paymentchannelfund.md index c2a6abcc5f..acc071e4d9 100644 --- a/content/references/protocol-reference/transactions/transaction-types/paymentchannelfund.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/paymentchannelfund.md @@ -8,7 +8,7 @@ labels: # PaymentChannelFund [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source") -_[PayChan Amendment][]が必要です。_ +_[PayChan Amendment][]により追加されました。_ Payment ChannelにXRPを追加する、有効期限の更新も可能。このトランザクションは、Channelの支払元アドレスだけが使用できます。 diff --git a/content/references/protocol-reference/transactions/transaction-types/setregularkey.ja.md b/content/@i18n/ja/references/protocol/transactions/types/setregularkey.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/setregularkey.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/setregularkey.md diff --git a/content/references/protocol-reference/transactions/transaction-types/signerlistset.ja.md b/content/@i18n/ja/references/protocol/transactions/types/signerlistset.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/signerlistset.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/signerlistset.md diff --git a/content/references/protocol-reference/transactions/transaction-types/ticketcreate.ja.md b/content/@i18n/ja/references/protocol/transactions/types/ticketcreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ticketcreate.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/ticketcreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/trustset.ja.md b/content/@i18n/ja/references/protocol/transactions/types/trustset.md similarity index 94% rename from content/references/protocol-reference/transactions/transaction-types/trustset.ja.md rename to content/@i18n/ja/references/protocol/transactions/types/trustset.md index f7958e4da5..aa43199b5a 100644 --- a/content/references/protocol-reference/transactions/transaction-types/trustset.ja.md +++ b/content/@i18n/ja/references/protocol/transactions/types/trustset.md @@ -49,7 +49,7 @@ TrustSetタイプのトランザクションについては、[`Flags`フィー | フラグ名 | 16進数値 | 10進数値 | 説明 | |:------------------|:-------------|:--------------|:----------------------| -| `tfSetfAuth` | `0x00010000` | 65536 | [このアカウントから発行された通貨](issued-currencies.html)を相手方に保有させることを許可します。([*asfRequireAuth* AccountSet フラグ](accountset.html#accountsetのフラグ)を使用しない場合は効果がありません。)設定を解除できません。 | +| `tfSetfAuth` | `0x00010000` | 65536 | [このアカウントから発行された通貨](tokens.html)を相手方に保有させることを許可します。([*asfRequireAuth* AccountSet フラグ](accountset.html#accountsetのフラグ)を使用しない場合は効果がありません。)設定を解除できません。 | | `tfSetNoRipple` | `0x00020000` | 131072 | 2つのトラストラインの両方でこのフラグが有効になっている場合、同じ通貨のトラストライン間の[リップリング](rippling.html)をブロックする No Ripple フラグを有効にします。 | | `tfClearNoRipple` | `0x00040000` | 262144 | No Rippleフラグを無効にし、このトラストラインで[リップリング](rippling.html)を許可します。 | | `tfSetFreeze` | `0x00100000` | 1048576 | トラストラインを[凍結](freezes.html)します。 | diff --git a/content/references/xrp-api.ja.md b/content/@i18n/ja/references/xrp-api.md similarity index 100% rename from content/references/xrp-api.ja.md rename to content/@i18n/ja/references/xrp-api.md diff --git a/content/references/xrp-ledger-toml.ja.md b/content/@i18n/ja/references/xrp-ledger-toml.md similarity index 99% rename from content/references/xrp-ledger-toml.ja.md rename to content/@i18n/ja/references/xrp-ledger-toml.md index 3ecc3ca972..ec6cfd76f9 100644 --- a/content/references/xrp-ledger-toml.ja.md +++ b/content/@i18n/ja/references/xrp-ledger-toml.md @@ -219,7 +219,7 @@ _各_`[[VALIDATORS]]`エントリごとに、以下から任意のフィール ### 通貨 -XRP Ledgerで資産、トークン、または通貨を発行する場合は、`[[CURRENCIES]]`リストでそれらに関する情報を提供できます。通貨リストは、(存在する場合)各エントリが二重角括弧を含んだヘッダー`[[CURRENCIES]]`を使用する複数のテーブルの配列でなければなりません。各エントリは、個別の発行済み通貨または資産を示します。 _各_`[[CURRENCIES]]`エントリごと _に_ 、以下から任意のフィールドを指定することができます。 +XRP Ledgerで資産、トークン、または通貨を発行する場合は、`[[CURRENCIES]]`リストでそれらに関する情報を提供できます。通貨リストは、(存在する場合)各エントリが二重角括弧を含んだヘッダー`[[CURRENCIES]]`を使用する複数のテーブルの配列でなければなりません。各エントリは、個別のまたは資産を示します。 _各_`[[CURRENCIES]]`エントリごと _に_ 、以下から任意のフィールドを指定することができます。 | フィールド | 型 | 説明 | |:--------|:-------|:------------------------------------------------------| diff --git a/content/references/xrpljs2-migration-guide.ja.md b/content/@i18n/ja/references/xrpljs2-migration-guide.md similarity index 100% rename from content/references/xrpljs2-migration-guide.ja.md rename to content/@i18n/ja/references/xrpljs2-migration-guide.md diff --git a/content/resources/contribute-code/contribute-code.ja.md b/content/@i18n/ja/resources/contribute-code/contribute-code.md similarity index 100% rename from content/resources/contribute-code/contribute-code.ja.md rename to content/@i18n/ja/resources/contribute-code/contribute-code.md diff --git a/content/resources/contribute-code/create-custom-transactors.ja.md b/content/@i18n/ja/resources/contribute-code/create-custom-transactors.md similarity index 100% rename from content/resources/contribute-code/create-custom-transactors.ja.md rename to content/@i18n/ja/resources/contribute-code/create-custom-transactors.md diff --git a/content/resources/contribute-documentation/creating-diagrams.ja.md b/content/@i18n/ja/resources/contribute-documentation/creating-diagrams.md similarity index 100% rename from content/resources/contribute-documentation/creating-diagrams.ja.md rename to content/@i18n/ja/resources/contribute-documentation/creating-diagrams.md diff --git a/content/resources/contribute-documentation/documentation-translations.ja.md b/content/@i18n/ja/resources/contribute-documentation/documentation-translations.md similarity index 100% rename from content/resources/contribute-documentation/documentation-translations.ja.md rename to content/@i18n/ja/resources/contribute-documentation/documentation-translations.md diff --git a/content/resources/contribute-documentation/contribute-documentation.ja.md b/content/@i18n/ja/resources/contribute-documentation/index.md similarity index 100% rename from content/resources/contribute-documentation/contribute-documentation.ja.md rename to content/@i18n/ja/resources/contribute-documentation/index.md diff --git a/content/resources/contribute-documentation/tutorial-guidelines.ja.md b/content/@i18n/ja/resources/contribute-documentation/tutorial-guidelines.md similarity index 100% rename from content/resources/contribute-documentation/tutorial-guidelines.ja.md rename to content/@i18n/ja/resources/contribute-documentation/tutorial-guidelines.md diff --git a/content/resources/contribute-documentation/tutorial-structure.ja.md b/content/@i18n/ja/resources/contribute-documentation/tutorial-structure.md similarity index 100% rename from content/resources/contribute-documentation/tutorial-structure.ja.md rename to content/@i18n/ja/resources/contribute-documentation/tutorial-structure.md diff --git a/content/@i18n/ja/resources/index.md b/content/@i18n/ja/resources/index.md new file mode 100644 index 0000000000..d7119c09b1 --- /dev/null +++ b/content/@i18n/ja/resources/index.md @@ -0,0 +1,8 @@ +--- +html: resources.html +parent: index.html +template: pagetype-category.html.jinja +--- +# リソース + +XRP Ledgerの理解や開発ためのリソース。Other resources to help understand the XRPL and develop on it. \ No newline at end of file diff --git a/content/resources/known-amendments.ja.md b/content/@i18n/ja/resources/known-amendments.md similarity index 99% rename from content/resources/known-amendments.ja.md rename to content/@i18n/ja/resources/known-amendments.md index 90bbfed981..2d9c58c271 100644 --- a/content/resources/known-amendments.ja.md +++ b/content/@i18n/ja/resources/known-amendments.md @@ -257,7 +257,7 @@ Clawbackはデフォルトでは無効になっています。Clawbackを使用 新しいアカウントフラグ`DepositAuth`を追加します。これにより、他のアカウントから送信されたトランザクションに係る入金が厳密に拒否されます。企業はこのフラグを使用することで、あらゆる送金人からの送金を受け入れる前に規則に準拠して適切に対処することができます。 -支払先のアカウントのこのフラグが有効になっている場合、支払いがXRPでなされるか、発行済み通貨でなされるかにかかわらず、Paymentトランザクションは失敗となります。アカウントが支払先である場合、支払先アカウント自体から上記のトランザクションが送信されなければ、EscrowFinishトランザクションとPaymentChannelClaimトランザクションは失敗します。[Checks][] amendmentが有効である場合、CheckCashトランザクションを送信することによってXRPまたは発行済み通貨をアカウントで受け取ることができます。 +支払先のアカウントのこのフラグが有効になっている場合、支払いがXRPでなされるか、トークンでなされるかにかかわらず、Paymentトランザクションは失敗となります。アカウントが支払先である場合、支払先アカウント自体から上記のトランザクションが送信されなければ、EscrowFinishトランザクションとPaymentChannelClaimトランザクションは失敗します。[Checks][] amendmentが有効である場合、CheckCashトランザクションを送信することによってXRPまたはトークンをアカウントで受け取ることができます。 例外として、`DepositAuth`が有効になっているアカウントでは、現在のXRP残高がアカウントの準備金を下回る場合、少額のXRP([アカウント準備金](reserves.html)の最低額以下)のPaymentトランザクションを受け取ることができます。 @@ -325,7 +325,7 @@ Checks、Payment Channels、NFTokenOffer、およびトラストラインを自 - トランザクションによって消却されたXRPの合計額は、[トランザクションコスト](transaction-cost.html)と正確に一致していなければなりません。 - XRPは作成できません。 -- [レジャー内の`AccountRoot`オブジェクト](accountroot.html)は、[DeletableAccounts](#deletableaccounts)が有効でない限り削除できません。(関連項目: [アカウントの削除](accounts.html#アカウントの削除)) +- [レジャー内の`AccountRoot`オブジェクト](accountroot.html)は、[DeletableAccounts](#deletableaccounts)が有効でない限り削除できません。(関連項目: [アカウントの削除](deleting-accounts.html)) - [レジャー内のオブジェクト](ledger-object-types.html)のタイプは変更できません。(`LedgerEntryType`フィールドは変更できません。) - XRPにトラストラインはありません。 @@ -395,7 +395,7 @@ XRP Ledger内のEscrowにXRPの「仮払い」機能を提供します。これ | デフォルトの投票(最新の安定版) | はい | | Amendment前の機能は廃止? | はい | -[送金手数料](transfer-fees.html)に限度を正しく導入し、100%の料金にします。これは、`TransferRate`値の最大値である`2000000000`を表します。(この場合の100%の料金とは、送信する1ユニットごとに2ユニットの発行済み通貨を送信する必要があることを意味します。)この修正を行わない場合、有効な限度は`TransferRate`値の232-1、つまり約329%の料金となります。 +[送金手数料](transfer-fees.html)に限度を正しく導入し、100%の料金にします。これは、`TransferRate`値の最大値である`2000000000`を表します。(この場合の100%の料金とは、送信する1ユニットごとに2ユニットのトークンを送信する必要があることを意味します。)この修正を行わない場合、有効な限度は`TransferRate`値の232-1、つまり約329%の料金となります。 この修正を行う場合、[AccountSet][]トランザクションの`TransferRate`を`2000000000`より高く設定すると、トランザクションは結果コード`temBAD_TRANSFER_RATE`にて失敗します。以前のルールに従って高い値が設定されている既存のすべての`TransferRate`には、そのまま高い率が適用されます。 diff --git a/content/@i18n/ja/tutorials/get-started/get-started-using-http-websocket-apis.md b/content/@i18n/ja/tutorials/get-started/get-started-using-http-websocket-apis.md new file mode 100644 index 0000000000..dd54d3194c --- /dev/null +++ b/content/@i18n/ja/tutorials/get-started/get-started-using-http-websocket-apis.md @@ -0,0 +1,115 @@ +--- +html: get-started-using-http-websocket-apis.html +parent: http-websocket-apis-tutorials.html +blurb: XRP Ledgerの操作に使用できるAPIとライブラリを使い始めましょう。 +cta_text: 開始しよう +top_nav_name: HTTP / WebSocket +top_nav_grouping: 始めましょう +labels: + - 開発 +showcase_icon: assets/img/logos/globe.svg +--- +# HTTP / WebSocket APIの使用開始 + +自分の好みのプログラミング言語の[クライアント・ライブラリ](client-libraries.html)を持っていなかったり、使いたくなかったりする場合は、XRP Ledgerのコアサーバソフトウェアである[`rippled`](xrpl-servers.html)のAPIを通して直接XRP Ledgerにアクセスすることができます。このサーバはJSON-RPCとWebSocketプロトコルでAPIを提供します。もし`rippled`(install-rippled.html)のインスタンスを実行しない場合でも、[公開サーバ][public servers]を利用することができます。 + +**ヒント:** [**WebSocket API ツール**](websocket-api-tool.html)を使ってAPIを利用することもできますし、[XRP Ledger Explorer](https://livenet.xrpl.org/)を使ってレジャーの進捗をライブで見ることもできます。 + +## 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は、サーバがクライアントにデータをプッシュできる持続的な接続を使用します。[イベント購読](subscribe.html)のようなプッシュメッセージを必要とする機能は、WebSocketを使用してのみ利用可能です。 + +どちらのAPIも暗号化されていない接続(`http://`と`ws://`)とTLSを使って暗号化された接続(`https://`と`wss://`)があります。暗号化されていない接続はオープンネットワーク上で提供すべきではありませんが、クライアントがサーバと同じマシン上にある場合は使用できます。 + + +## 管理者アクセス権限 + +`rippled`サーバの[管理メソッド](admin-api-methods.html)を使用するには、次のように行います。この場合、サーバのバインド用として設定した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-RPC(HTTP)、ポート6006でWebSocket(WS)の接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。 + + +## WebSocket API + +いくつかのメソッドをXRP Ledgerで試すことを予定している場合は、独自のWebSocketコードを記述することなく、[WebSocket APIツール](websocket-api-tool.html)でAPIをすぐに使用できます。後ほど、独自の`rippled`サーバへの接続が必要となった時点で、Web Socket接続をサポートした[独自のクライアントを構築](monitor-incoming-payments-with-websocket.html)したり[クライアントライブラリ](client-libraries.html)を利用することが可能です。 + +WebSocket APIによるリクエストの例: + +```json +{ + "id": "my_first_request", + "command": "server_info", + "api_version": 1 +} +``` + +レスポンスには、サーバの現在のステータスが表示されます。 + +さらに見る: [リクエストのフォーマット >](request-formatting.html) [レスポンスのフォーマット >](response-formatting.html) [server_infoメソッドについて >][server_info method] + +## 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 + } + ] +} +``` + +レスポンスには、サーバの現在のステータスが表示されます。 + +さらに見る: [リクエストのフォーマット >](request-formatting.html#json-rpcフォーマット) [レスポンスのフォーマット >](response-formatting.html) [server_infoメソッドについて >][server_info method] + +## コマンドライン + +このコマンドラインインターフェイスは、JSON-RPCのものと同一のサービスに接続するため、公開サーバおよびサーバ構成は同一です。コマンドラインクライアントとして、`rippled`がローカルインスタンスに接続します。 + +コマンドラインによるリクエストの例: + +``` +rippled --conf=/etc/rippled.cfg server_info +``` + +さらに見る: [dコマンドライン使用リファレンス >](commandline-usage.html) + +**注記:** コマンドラインインターフェイスは、管理の目的でのみ使用されることを想定しており _サポートされるAPIではありません_。`rippled`の将来のバージョンでは、警告なしにコマンドラインAPIに破壊的変更を加える可能性があります! + +## 利用可能なメソッド + +APIメソッドの完全なリストについては、こちらをご覧ください。 + +- [パブリックな`rippled`メソッド](public-api-methods.html): レジャーからのデータの検索やトランザクションの送信など、パブリックサーバで利用可能なメソッドです。 +- [管理用`rippled`メソッド](admin-api-methods.html): [管理者向け](manage-the-rippled-server.html)の`rippled`サーバを管理するためのメソッドです。 + + +## 関連項目 + +- **コンセプト:** + - [XRP Ledgerの概要](xrp-ledger-overview.html) + - [ソフトウェアエコシステム](software-ecosystem.html) + - [並列ネットワーク](parallel-networks.html) +- **チュートリアル:** + - [JavaScriptの使用開始](get-started-using-javascript.html) + - [信頼できるトランザクションの送信](reliable-transaction-submission.html) + - [rippledサーバの管理](manage-the-rippled-server.html) +- **リファレンス:** + - [rippled APIリファレンス](http-websocket-apis.html) + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/tutorials/get-started/get-started-using-javascript.ja.md b/content/@i18n/ja/tutorials/get-started/get-started-using-javascript.md similarity index 95% rename from content/tutorials/get-started/get-started-using-javascript.ja.md rename to content/@i18n/ja/tutorials/get-started/get-started-using-javascript.md index 4796b831d4..337e17273f 100644 --- a/content/tutorials/get-started/get-started-using-javascript.ja.md +++ b/content/@i18n/ja/tutorials/get-started/get-started-using-javascript.md @@ -42,7 +42,7 @@ npm install xrpl ## 作り始めましょう -XRP Ledgerを使用する際には、XRPを[ウォレット](wallets.html)に追加したり、[分散型取引所](decentralized-exchange.html)と統合したり、[トークンを発行](issued-currencies.html)したりと、管理しなければならないことがいくつかあります。このチュートリアルでは、これらすべてのユースケースを始めるための共通の基本パターンを説明し、それらを実装するためのサンプルコードを提供します。 +XRP Ledgerを使用する際には、XRPを[ウォレット](wallets.html)に追加したり、[分散型取引所](decentralized-exchange.html)と統合したり、[トークンを発行](tokens.html)したりと、管理しなければならないことがいくつかあります。このチュートリアルでは、これらすべてのユースケースを始めるための共通の基本パターンを説明し、それらを実装するためのサンプルコードを提供します。 多くのXRP Ledgerプロジェクトで使用している手順をご紹介します。 diff --git a/content/tutorials/get-started/monitor-incoming-payments-with-websocket.ja.md b/content/@i18n/ja/tutorials/get-started/monitor-incoming-payments-with-websocket.md similarity index 95% rename from content/tutorials/get-started/monitor-incoming-payments-with-websocket.ja.md rename to content/@i18n/ja/tutorials/get-started/monitor-incoming-payments-with-websocket.md index d5bf276a62..424396f46a 100644 --- a/content/tutorials/get-started/monitor-incoming-payments-with-websocket.ja.md +++ b/content/@i18n/ja/tutorials/get-started/monitor-incoming-payments-with-websocket.md @@ -19,7 +19,7 @@ WebSocketは、クライアントとサーバーが1つの接続を確立し、 - このページの例では、すべての主要な最新ブラウザーで使用できるJavaScriptおよびWebSocketプロトコルを使用しています。JavaScriptにある程度習熟し、WebSocketクライアントを使用する他のプログラミング言語の専門知識があれば、選択する言語に手順を適合させながら進めていくことができます。 - 安定したインターネット接続と`rippled`サーバーへアクセスが必要です。埋め込まれている例では、Rippleの公開サーバーのプールに接続します。[独自の`rippled`サーバーを運用](install-rippled.html)する場合は、ローカルでそのサーバーに接続することもできます。 -- 丸め方によるエラーを発生させることなくXRPの価値を適切に処理するには、64ビット符号なし整数で計算できる数値タイプを使用できる必要があります。このチュートリアルの例では、[big.js](https://github.com/MikeMcl/big.js/)を使用しています。[発行済み通貨](issued-currencies.html)を使用する場合は、さらに高い精度が求められます。詳細は、[通貨の精度](currency-formats.html#xrpの精度)を参照してください。 +- 丸め方によるエラーを発生させることなくXRPの価値を適切に処理するには、64ビット符号なし整数で計算できる数値タイプを使用できる必要があります。このチュートリアルの例では、[big.js](https://github.com/MikeMcl/big.js/)を使用しています。[トークン](tokens.html)を使用する場合は、さらに高い精度が求められます。詳細は、[通貨の精度](currency-formats.html#xrpの精度)を参照してください。 @@ -334,7 +334,7 @@ WS_HANDLERS["transaction"] = log_tx ## {{n.next()}}. 着信ペイメントの読み取り -アカウントをサブスクライブすると、 _アカウントへのすべてのトランザクションとアカウントからのすべてのトランザクション_ 、および _アカウントに間接的に影響を及ぼすトランザクション_ に関するメッセージが表示されます。この例として、[発行済み通貨](issued-currencies.html)の取引があります。アカウントが着信ペイメントを受け取った日時を認識することを目的とする場合、トランザクションストリームを絞り込んで、実際に支払われた額に基づいて支払いを処理する必要があります。以下の情報を探します。 +アカウントをサブスクライブすると、 _アカウントへのすべてのトランザクションとアカウントからのすべてのトランザクション_ 、および _アカウントに間接的に影響を及ぼすトランザクション_ に関するメッセージが表示されます。この例として、[トークン](tokens.html)の取引があります。アカウントが着信ペイメントを受け取った日時を認識することを目的とする場合、トランザクションストリームを絞り込んで、実際に支払われた額に基づいて支払いを処理する必要があります。以下の情報を探します。 - **`validated`フィールド**は、トランザクションの結果が[最終的である](finality-of-results.html)ことを示します。これは、`accounts`をサブスクライブする場合に常に当てはまりますが、`accounts_proposed`または`transactions_proposed`ストリーム _も_ サブスクライブしている場合は、サーバーは未確認のトランザクションに関して同様のメッセージを同じ接続で送信します。予防策として、`validated`フィールドを常に確認することをお勧めします。 @@ -344,7 +344,7 @@ WS_HANDLERS["transaction"] = log_tx - **`transaction.TransactionType`フィールド**はトランザクションのタイプです。アカウントに通貨を送金できる可能性があるトランザクションのタイプは以下のとおりです。 - - **[Paymentトランザクション][]** はXRPまたは[発行済み通貨](issued-currencies.html)を送金できます。受取人のアドレスを含んでいる`transaction.Destination`フィールドによってこれらを絞り込み、必ず`meta.delivered_amount`を使用して実際に支払われた額を確認します。XRPの額は、[文字列のフォーマットで記述されます](basic-data-types.html#通貨額の指定)。 + - **[Paymentトランザクション][]** はXRPまたは[トークン](tokens.html)を送金できます。受取人のアドレスを含んでいる`transaction.Destination`フィールドによってこれらを絞り込み、必ず`meta.delivered_amount`を使用して実際に支払われた額を確認します。XRPの額は、[文字列のフォーマットで記述されます](basic-data-types.html#通貨額の指定)。 **警告:** 代わりに`transaction.Amount`フィールドを使用すると、[Partial Paymentの悪用](partial-payments.html#partial-paymentの悪用)に対して脆弱になる可能性があります。不正使用者はこの悪用を行ってあなたをだまし、あなたが支払ったよりも多くの金額を交換または引き出すことができます。 @@ -352,7 +352,7 @@ WS_HANDLERS["transaction"] = log_tx - **[EscrowFinishトランザクション][]** は、以前の[EscrowCreateトランザクション][]によって作成された[Escrow](escrow.html)を終了することでXRPを送金できます。**EscrowFinishトランザクション**のメタデータを確認すると、escrowからXRPを受け取ったアカウントと、その額を確認できます。 - - **[OfferCreateトランザクション][]** はアカウントがXRP Ledgerの[分散型取引所](decentralized-exchange.html)で以前発行したオファーを消費することで、XRPまたは発行済み通貨を送金できます。オファーを発行しないと、この方法で金額を受け取ることはできません。メタデータを確認して、アカウントが受け取った通貨(この情報がある場合)と、金額を確認します。 + - **[OfferCreateトランザクション][]** はアカウントがXRP Ledgerの[分散型取引所](decentralized-exchange.html)で以前発行したオファーを消費することで、XRPまたはトークンを送金できます。オファーを発行しないと、この方法で金額を受け取ることはできません。メタデータを確認して、アカウントが受け取った通貨(この情報がある場合)と、金額を確認します。 - **[PaymentChannelClaimトランザクション][]** では、[Payment Channel](payment-channels.html)からXRPを送金できます。メタデータを確認して、トランザクションからXRPを受け取ったアカウント(この情報がある場合)を確認します。 diff --git a/content/tutorials/get-started/public-servers.ja.md b/content/@i18n/ja/tutorials/get-started/public-servers.md similarity index 87% rename from content/tutorials/get-started/public-servers.ja.md rename to content/@i18n/ja/tutorials/get-started/public-servers.md index b57d2a3932..d5f93ab99b 100644 --- a/content/tutorials/get-started/public-servers.ja.md +++ b/content/@i18n/ja/tutorials/get-started/public-servers.md @@ -18,12 +18,13 @@ labels: | XRPL Labs | Testnet | `https://testnet.xrpl-labs.com/` | `wss://testnet.xrpl-labs.com/` | CORSをサポートする Testnet 公開サーバー | | Ripple[¹][] | Devnet | `https://s.devnet.rippletest.net:51234/` | `wss://s.devnet.rippletest.net:51233/` | Devnet 公開サーバー | | Ripple[¹][] | AMM-Devnet | `https://amm.devnet.rippletest.net:51234/` | `wss://amm.devnet.rippletest.net:51233/` | [XLS-30d Automated Market Maker](https://github.com/XRPLF/XRPL-Standards/discussions/78)開発用の特別なdevnetサーバー | +| XRPL Labs | Hooks-Testnet| `https://hooks-testnet-v3.xrpl-labs.com` | `wss://hooks-testnet-v3.xrpl-labs.com` | Hooks V3 Testnet | [ネットワーク]: parallel-networks.html [¹]: #footnote-1 [²]: #footnote-2 -¹ Ripple社の公開サーバーは、持続的な利用やビジネスでの利用には適しておらず、いつでも利用できなくなる可能性があります。定期的に使用する場合は、ご自身で `rippled` サーバーを運用するか、信頼できる人と契約してください。リップル社では、公開クラスターに[Reporting Mode][]サーバーが含まれています。 +¹ Ripple社の公開サーバーは、持続的な利用やビジネスでの利用には適しておらず、いつでも利用できなくなる可能性があります。定期的に使用する場合は、ご自身で`rippled`サーバーを運用するか、信頼できる人と契約してください。Ripple社の公開クラスターには[Reporting Mode][]サーバが含まれています。 ² `xrpl.ws` は `xrplcluster.com` のエイリアスです。しかし、`.ws` というトップレベルドメインの信頼性は、本番での使用には適さないかもしれません。 diff --git a/content/tutorials/get-started/send-xrp.ja.md b/content/@i18n/ja/tutorials/get-started/send-xrp.md similarity index 100% rename from content/tutorials/get-started/send-xrp.ja.md rename to content/@i18n/ja/tutorials/get-started/send-xrp.md diff --git a/content/@i18n/ja/tutorials/http-websocket-apis/index.md b/content/@i18n/ja/tutorials/http-websocket-apis/index.md new file mode 100644 index 0000000000..7c801a2b00 --- /dev/null +++ b/content/@i18n/ja/tutorials/http-websocket-apis/index.md @@ -0,0 +1,9 @@ +--- +html: http-websocket-apis-tutorials.html +parent: tutorials.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# HTTP / Websocket API + +HTTP / Websocket APIのXRPLチュートリアルです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/java/index.md b/content/@i18n/ja/tutorials/java/index.md new file mode 100644 index 0000000000..ec36bfc529 --- /dev/null +++ b/content/@i18n/ja/tutorials/java/index.md @@ -0,0 +1,9 @@ +--- +html: java.html +parent: tutorials.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# Java + +JavaでのXRPLチュートリアルです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/javascript/index.md b/content/@i18n/ja/tutorials/javascript/index.md new file mode 100644 index 0000000000..db682fa878 --- /dev/null +++ b/content/@i18n/ja/tutorials/javascript/index.md @@ -0,0 +1,9 @@ +--- +html: javascript.html +parent: tutorials.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# JavaScript + +JavaScriptでのXRPLチュートリアルです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/index.md b/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/index.md new file mode 100644 index 0000000000..7cbf2bd77d --- /dev/null +++ b/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/index.md @@ -0,0 +1,9 @@ +--- +html: modular-tutorials-in-javascript.html +parent: javascript.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# JavaScriptのモジュール形式チュートリアル + +JavaScriptによるモジュール式XRPLチュートリアルです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md b/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md new file mode 100644 index 0000000000..96613159e6 --- /dev/null +++ b/content/@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md @@ -0,0 +1,9 @@ +--- +html: nfts-using-javascript.html +parent: modular-tutorials-in-javascript.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# JavaScriptを使ったNFT + +XRP Ledger上でNFTのミントと販売を行います。 \ No newline at end of file diff --git a/content/tutorials/manage-account-settings/assign-a-regular-key-pair.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/assign-a-regular-key-pair.md similarity index 100% rename from content/tutorials/manage-account-settings/assign-a-regular-key-pair.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/assign-a-regular-key-pair.md diff --git a/content/tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.md similarity index 100% rename from content/tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.md diff --git a/content/tutorials/manage-account-settings/disable-master-key-pair.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/disable-master-key-pair.md similarity index 100% rename from content/tutorials/manage-account-settings/disable-master-key-pair.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/disable-master-key-pair.md diff --git a/content/tutorials/manage-account-settings/offline-account-setup.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/offline-account-setup.md similarity index 97% rename from content/tutorials/manage-account-settings/offline-account-setup.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/offline-account-setup.md index a3251667fb..08b212cac1 100644 --- a/content/tutorials/manage-account-settings/offline-account-setup.ja.md +++ b/content/@i18n/ja/tutorials/manage-account-settings/offline-account-setup.md @@ -145,10 +145,10 @@ Loading: "/etc/opt/ripple/rippled.cfg" - ユーザーが送金理由や送金相手をタグ付けせずに送金できないようにするために、[宛先タグを要求する](require-destination-tags.html)。 - アカウントセキュリティを強化するために、[マルチシグを設定する](set-up-multi-signing.html)。 - 明示的に承認した送金、または事前に承認した相手からの送金のみを受け取れるようにするために、[DepositAuthを有効にする](depositauth.html)。 -- ユーザーがあなたの許可なくあなたへの[トラストライン](trust-lines-and-issuing.html)を開けないようにするために、[RequireAuthを有効にする](authorized-trust-lines.html#requireauthの有効化)。XRP Ledgerの分散型取引所や発行済み通貨機能を使用する予定がない場合は、これを対策として行うことをお勧めします。 -- 発行済み通貨[ゲートウェイ](stablecoin-issuer.html)には次のような追加の設定がある場合があります。 - - 発行済み通貨を送金するユーザーに対して[TransferRateを設定する](stablecoin-issuer.html#transfer-fees)。 - - このアドレスを発行済み通貨のみに使用する予定の場合は、[XRPペイメントを禁止する](stablecoin-issuer.html#disallow-xrp)。 +- ユーザーがあなたの許可なくあなたへの[トラストライン](trust-lines-and-issuing.html)を開けないようにするために、[RequireAuthを有効にする](authorized-trust-lines.html#requireauthの有効化)。XRP Ledgerの分散型取引所やトークン機能を使用する予定がない場合は、これを対策として行うことをお勧めします。 +- トークン[ゲートウェイ](stablecoin-issuer.html)には次のような追加の設定がある場合があります。 + - トークンを送金するユーザーに対して[TransferRateを設定する](stablecoin-issuer.html#transfer-fees)。 + - このアドレスをトークンのみに使用する予定の場合は、[XRPペイメントを禁止する](stablecoin-issuer.html#disallow-xrp)。 この段階では、トランザクションに署名をするだけで、まだ送信しません。各トランザクションに対して、`Fee`([トランザクションコスト](transaction-cost.html))や`Sequence`([シーケンス番号][])など、通常は自動入力可能なフィールドを含めて、すべてのフィールドに入力する必要があります。一度に複数のトランザクションを準備する場合は、トランザクションの実行順にシーケンシャルに増やした`Sequence`番号を使用する必要があります。 diff --git a/content/tutorials/manage-account-settings/require-destination-tags.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/require-destination-tags.md similarity index 97% rename from content/tutorials/manage-account-settings/require-destination-tags.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/require-destination-tags.md index a174b8967d..6696d1c8e6 100644 --- a/content/tutorials/manage-account-settings/require-destination-tags.ja.md +++ b/content/@i18n/ja/tutorials/manage-account-settings/require-destination-tags.md @@ -5,7 +5,7 @@ blurb: ユーザーがあなたのアドレスに送金するときに宛先タ labels: - アカウント --- -# 宛先タグの要求 +# 宛先タグの必須化 `RequireDest`設定は、送金先を識別する[宛先タグ](source-and-destination-tags.html)を顧客が付け忘れている場合にあなたのアドレスに[送金](payment-types.html)できないようにするためのものです。有効にすると、XRP Ledgerは宛先タグが付いていないあなたのアドレスへの送金を拒否します。 @@ -82,7 +82,7 @@ Content-Type: application/json - **コンセプト:** - [アカウント](accounts.html) - - [ソースタグと宛先タグ](source-and-destination-tags.html) + - [送信元と宛先タグ](source-and-destination-tags.html) - [トランザクションコスト](transaction-cost.html) - [支払いタイプ](payment-types.html) - **リファレンス:** diff --git a/content/tutorials/manage-account-settings/send-a-multi-signed-transaction.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/send-a-multi-signed-transaction.md similarity index 100% rename from content/tutorials/manage-account-settings/send-a-multi-signed-transaction.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/send-a-multi-signed-transaction.md diff --git a/content/tutorials/manage-account-settings/set-up-multi-signing.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/set-up-multi-signing.md similarity index 100% rename from content/tutorials/manage-account-settings/set-up-multi-signing.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/set-up-multi-signing.md diff --git a/content/tutorials/manage-account-settings/use-tickets.ja.md b/content/@i18n/ja/tutorials/manage-account-settings/use-tickets.md similarity index 100% rename from content/tutorials/manage-account-settings/use-tickets.ja.md rename to content/@i18n/ja/tutorials/manage-account-settings/use-tickets.md diff --git a/content/@i18n/ja/tutorials/python/index.md b/content/@i18n/ja/tutorials/python/index.md new file mode 100644 index 0000000000..6a85d85905 --- /dev/null +++ b/content/@i18n/ja/tutorials/python/index.md @@ -0,0 +1,9 @@ +--- +html: python.html +parent: tutorials.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# Python + +PythonでのXRPLチュートリアルです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/python/modular-tutorials-in-python/index.md b/content/@i18n/ja/tutorials/python/modular-tutorials-in-python/index.md new file mode 100644 index 0000000000..3a340dfae2 --- /dev/null +++ b/content/@i18n/ja/tutorials/python/modular-tutorials-in-python/index.md @@ -0,0 +1,9 @@ +--- +html: modular-tutorials-in-python.html +parent: python.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# Pythonのモジュール形式チュートリアル + +Pythonによるモジュール式XRPLチュートリアル。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/tasks/index.md b/content/@i18n/ja/tutorials/tasks/index.md new file mode 100644 index 0000000000..873d6e3081 --- /dev/null +++ b/content/@i18n/ja/tutorials/tasks/index.md @@ -0,0 +1,9 @@ +--- +html: tasks.html +parent: tutorials.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# タスク + +XRP Ledgerの代表的なタスクです。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/tasks/manage-account-settings/index.md b/content/@i18n/ja/tutorials/tasks/manage-account-settings/index.md new file mode 100644 index 0000000000..2703596de7 --- /dev/null +++ b/content/@i18n/ja/tutorials/tasks/manage-account-settings/index.md @@ -0,0 +1,8 @@ +--- +html: manage-account-settings.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# アカウントの設定の利用 + +XRP Ledgerアカウントを設定して、思い通りの支払いをしましょう。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/index.md b/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/index.md new file mode 100644 index 0000000000..576b144f60 --- /dev/null +++ b/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/index.md @@ -0,0 +1,8 @@ +--- +html: use-specialized-payment-types.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# 専門的な支払いタイプの使用 + +EscrowやPayment Channelなどの高度な機能を使用して、XRP Ledgerでスマートアプリケーションを構築しましょう。 \ No newline at end of file diff --git a/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md b/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md new file mode 100644 index 0000000000..2b3dc60332 --- /dev/null +++ b/content/@i18n/ja/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md @@ -0,0 +1,8 @@ +--- +html: use-escrows.html +parent: use-specialized-payment-types.html +template: pagetype-category.html.jinja +--- +# Escrowの使用 + +XRP Ledgerは、一定時間の経過後か暗号条件が満たされた場合にのみ実行されるEscrowをサポートします。Escrowが送金できるのはXRPのみで、トークンは送金できません。 diff --git a/content/@i18n/ja/tutorials/tasks/use-tokens/index.md b/content/@i18n/ja/tutorials/tasks/use-tokens/index.md new file mode 100644 index 0000000000..86163a4763 --- /dev/null +++ b/content/@i18n/ja/tutorials/tasks/use-tokens/index.md @@ -0,0 +1,8 @@ +--- +html: use-tokens.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# トークンの利用 + +XRP Ledgerでトークン(代替型やそれ以外)を発行し、取引しましょう \ No newline at end of file diff --git a/content/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.md similarity index 99% rename from content/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.md index ea3aa7d659..86f714b82e 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.md @@ -7,7 +7,7 @@ labels: --- # Checkの取消し -_[Checks Amendment][]が必要です。_ +_[Checks Amendment][]により追加されました。_ このチュートリアルでは、[Check](checks.html)を取り消す手順を説明します。この手順を実行すると、送金を行わずに[レジャーのCheckオブジェクト](check.html)が削除されます。 diff --git a/content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md similarity index 84% rename from content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md index 8e9be156cc..a99bb51e6b 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md @@ -7,7 +7,7 @@ labels: --- # Checkの変動金額での換金 -_[Checks Amendment][]が必要です。_ +_[Checks Amendment][]により追加されました。_ Checkがレジャーに記録されており有効期限切れではない場合は、指定受取人は`DeliverMin`フィールドを指定した[CheckCashトランザクション][]を送信することで、Checkを変動金額で換金して受領できます。この方法でCheckを換金すると、受取人は送金を最大限受領でき、Checkの送金元からは、Checkの`SendMax`の全額が引き落とされるか、または可能な限りの額が引き落とされます。Checkの受取人に`DeliverMin`以上の額を送金できない場合は換金が失敗します。 @@ -31,7 +31,7 @@ Checkから可能な限りの額を受領したい場合には、変動金額で | `TransactionType` | 文字列 | 値が`CheckCash`の場合、これはCheckCashトランザクションです。 | | `Account` | 文字列(アドレス) | Checkを換金する送信者のアドレス。(あなたのアドレスです。) | | `CheckID` | 文字列 | レジャーで換金するCheckオブジェクトのID。この情報を確認するには、[txメソッド][]を使用してCheckCreateトランザクションのメタデータを調べるか、または[account_objectsメソッド][]を使用してCheckを探します。 | -| `DeliverMin` | 文字列またはオブジェクト(額) | Checkから受領する最小額。この額を受領できない場合はCheckの換金が失敗し、Checkがレジャーに残るので、後で換金を再試行できます。XRPの場合、XRPのdrop数を示す文字列でなければなりません。発行済み通貨の場合、これは`currency`、`issuer`、および`value` フィールドを持つオブジェクトです。`currency`フィールドと`issuer`フィールドは、Checkオブジェクトの対応するフィールドに一致しており、`value`はCheckオブジェクトの額以下でなければなりません。詳細は、[通貨額の指定][]を参照してください。 | +| `DeliverMin` | 文字列またはオブジェクト(額) | Checkから受領する最小額。この額を受領できない場合はCheckの換金が失敗し、Checkがレジャーに残るので、後で換金を再試行できます。XRPの場合、XRPのdrop数を示す文字列でなければなりません。トークンの場合、これは`currency`、`issuer`、および`value` フィールドを持つオブジェクトです。`currency`フィールドと`issuer`フィールドは、Checkオブジェクトの対応するフィールドに一致しており、`value`はCheckオブジェクトの額以下でなければなりません。詳細は、[通貨額の指定][]を参照してください。 | ### 変動金額で換金するCheckCashトランザクションの準備の例 @@ -162,7 +162,7 @@ Checkを変動金額で換金するためのトランザクションを準備す | `tecNO_LINE` | 受取人がCheckの通貨のトラストラインを所有していません。 | このイシュアーからのこの通貨を保有するには、指定された通貨とイシュアーのトラストラインを作成し、[TrustSetトランザクション][]を使用してこのトラストラインに適切な限度額を設定してから、Checkの換金を再試行します。 | | `tecNO_PERMISSION` | CheckCashトランザクションの送信者はCheckの`Destination`ではありません。 | Checkの`Destination`を再度確認します。 | | `tecNO_AUTH` | このCheckの通貨のイシュアーは[Authorized Trust Line](authorized-trust-lines.html)を使用していますが、受取人からイシュアーへのトラストラインが承認されていません。 | このトラストラインを承認するようイシュアーに依頼し、承認されたらCheckの換金を再試行します。 | -| `tecPATH_PARTIAL` | トラストラインの限度額、または送金元に送金通貨の残高(イシュアーの[送金手数料](transfer-fees.html)がある場合はこの手数料を含む)が十分になかったことが原因で、Checkでは十分な発行済み通貨を送金できませんでした。 | 原因がトラストラインの限度額である場合は、(希望する場合には)限度額を引き上げる[TrustSetトランザクション][]を送信するか、または通貨の一部を消費して残高を減らしてから、Checkの換金を再試行します。原因が送金元の残高である場合は、送金元にCheckの通貨が積み増しされるまで待つか、または以前よりも低い額でCheckの換金を再試行します。 | +| `tecPATH_PARTIAL` | トラストラインの限度額、または送金元に送金通貨の残高(イシュアーの[送金手数料](transfer-fees.html)がある場合はこの手数料を含む)が十分になかったことが原因で、Checkでは十分なトークンを送金できませんでした。 | 原因がトラストラインの限度額である場合は、(希望する場合には)限度額を引き上げる[TrustSetトランザクション][]を送信するか、または通貨の一部を消費して残高を減らしてから、Checkの換金を再試行します。原因が送金元の残高である場合は、送金元にCheckの通貨が積み増しされるまで待つか、または以前よりも低い額でCheckの換金を再試行します。 | | `tecUNFUNDED_PAYMENT` | Checkで十分なXRPを送金できませんでした。 | 送金元にXRPが積み増しされるまで待つか、または以前よりも低い額でCheckの換金を再試行します。 | ## {{cash_flex_n.next()}}.送金された額の確認 @@ -200,15 +200,15 @@ Checkが変動する`DeliverMin`の額で換金された場合は、Checkは少 "DeliverMin" : "95000000", "Fee" : "10", -- Checkの送金元または受取人がイシュアーである発行済み通貨の場合、これらのアカウント間のトラストラインを表す`RippleState`オブジェクトでは、`Balance`がCheckの受取人に有利な方法で調整されています。 +- Checkの送金元または受取人がイシュアーであるトークンの場合、これらのアカウント間のトラストラインを表す`RippleState`オブジェクトでは、`Balance`がCheckの受取人に有利な方法で調整されています。 -- イシュアーが第三者である発行済み通貨の場合、2つの`RippleState`(送金元からイシュアーへのトラストラインとイシュアーから受取人へのトラストライン)に対する変更があります。Checkの送金元とイシュアーの関係を表す`RippleState`オブジェクトではその`Balance`がイシュアーに有利に変更され、イシュアーと受取人の間の関係を表す`RippleState`オブジェクトではその`Balance`が受取人に有利に変更されます。 +- イシュアーが第三者であるトークンの場合、2つの`RippleState`(送金元からイシュアーへのトラストラインとイシュアーから受取人へのトラストライン)に対する変更があります。Checkの送金元とイシュアーの関係を表す`RippleState`オブジェクトではその`Balance`がイシュアーに有利に変更され、イシュアーと受取人の間の関係を表す`RippleState`オブジェクトではその`Balance`が受取人に有利に変更されます。 - - 発行済み通貨に[送金手数料](transfer-fees.html)がある場合、受取人への入金額を上回る額がCheckの送金元から引き落とされます。(この差額が送金手数料であり、これがイシュアーに戻されることによりイシュアーの正味の債務は減少します。) + - トークンに[送金手数料](transfer-fees.html)がある場合、受取人への入金額を上回る額がCheckの送金元から引き落とされます。(この差額が送金手数料であり、これがイシュアーに戻されることによりイシュアーの正味の債務は減少します。) {% include '_snippets/tx-type-links.md' %} diff --git a/content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md similarity index 84% rename from content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md index 09b59f2669..a21af7dcd6 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md @@ -7,7 +7,7 @@ labels: --- # Checkの正確な金額での換金 -_[Checks Amendment][]が必要です。_ +_[Checks Amendment][]により追加されました。_ Checkがレジャーに含まれており有効期限切れではない場合は、指定の受取人は`Amount`フィールドを指定した[CheckCashトランザクション][]を送信することで、Checkを換金し、Checkに指定されている額までの正確な額を受領できます。請求書の額面通りの金額を回収したい場合など、特定の金額の受領を希望する際には、この方法でCheckを換金できます。 @@ -28,7 +28,7 @@ Checkがレジャーに含まれており有効期限切れではない場合は | `TransactionType` | 文字列 | 値が`CheckCash`の場合、これはCheckCashトランザクションです。 | | `Account` | 文字列(アドレス) | Checkを換金する送信者のアドレス。(あなたのアドレスです。) | | `CheckID` | 文字列 | レジャーで換金するCheckオブジェクトのID。この情報を確認するには、[txメソッド][]を使用してCheckCreateトランザクションのメタデータを調べるか、または[account_objectsメソッド][]を使用してCheckを探します。 | -| `Amount` | 文字列またはオブジェクト(額) | Checkから精算する額。XRPの場合、XRPのdrop数を示す文字列でなければなりません。発行済み通貨の場合、これは`currency`、`issuer`、および`value` フィールドを持つオブジェクトです。`currency`フィールドと`issuer`フィールドは、Checkオブジェクトの対応するフィールドに一致しており、`value`はCheckオブジェクトの額以下でなければなりません。(送金手数料のかかる通貨の場合、`SendMax`で送金手数料を支払えるように、`SendMax`よりも低い額を換金する必要があります。)この額を受領できない場合はCheckの換金が失敗し、Checkがレジャーに残るので、後で換金を再試行できます。詳細は、[通貨額の指定][]を参照してください。 | +| `Amount` | 文字列またはオブジェクト(額) | Checkから精算する額。XRPの場合、XRPのdrop数を示す文字列でなければなりません。トークンの場合、これは`currency`、`issuer`、および`value` フィールドを持つオブジェクトです。`currency`フィールドと`issuer`フィールドは、Checkオブジェクトの対応するフィールドに一致しており、`value`はCheckオブジェクトの額以下でなければなりません。(送金手数料のかかる通貨の場合、`SendMax`で送金手数料を支払えるように、`SendMax`よりも低い額を換金する必要があります。)この額を受領できない場合はCheckの換金が失敗し、Checkがレジャーに残るので、後で換金を再試行できます。詳細は、[通貨額の指定][]を参照してください。 | ### 正確な金額で換金するCheckCashトランザクションの準備の例 @@ -125,7 +125,7 @@ Checkを正確な金額で換金するためのトランザクションを準備 トランザクションのステータスを確認するには、CheckCashトランザクションの識別用ハッシュを指定した[txメソッド][]を使用します。トランザクションが成功したことを示す`"TransactionResult": "tesSUCCESS"`フィールドをトランザクションメタデータから検索し、またこの結果が最終結果であることを示す`"validated": true`フィールドを結果から検索します。 -Checkが正確な`Amount`で換金された場合は、受取人に対し正確な額が入金されたと想定できます(発行済み通貨の金額が極めて大きい場合や小さい場合は、金額が丸められることがあります)。 +Checkが正確な`Amount`で換金された場合は、受取人に対し正確な額が入金されたと想定できます(トークンの金額が極めて大きい場合や小さい場合は、金額が丸められることがあります)。 Checkを換金できない場合、Checkはレジャーに残るため、後日換金を再試行できます。代わりに[Checkを変動金額で換金する](cash-a-check-for-a-flexible-amount.html)ことができます。 diff --git a/content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.md similarity index 97% rename from content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.md index 88aae81d99..a840c9b844 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.md @@ -7,7 +7,7 @@ labels: --- # 受取人に基づくCheckの検索 -_[Checks Amendment][]が必要です。_ +_[Checks Amendment][]により追加されました。_ このチュートリアルでは、[Check](checks.html)をその受取人で検索する方法を説明します。[Checkを送金元で検索する](look-up-checks-by-sender.html)こともできます。 diff --git a/content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.md similarity index 97% rename from content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.md index 538e000480..181e567f93 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.md @@ -7,7 +7,7 @@ labels: --- # 送金元に基づくCheckの検索 -_[Checks Amendment][]が必要です。_ +_[Checks Amendment][]により追加されました。_ このチュートリアルでは、[Check](checks.html)をその送金元で検索する方法を説明します。[Checkを受取人で検索する](look-up-checks-by-recipient.html)こともできます。 diff --git a/content/tutorials/use-specialized-payment-types/use-checks/send-a-check.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/send-a-check.md similarity index 82% rename from content/tutorials/use-specialized-payment-types/use-checks/send-a-check.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/send-a-check.md index 03b0e083a5..35909e92e6 100644 --- a/content/tutorials/use-specialized-payment-types/use-checks/send-a-check.ja.md +++ b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/send-a-check.md @@ -7,8 +7,6 @@ labels: --- # Checkの送信 -_[Checks Amendment][]が必要です。_ - Checkの送信は、指定受取人にあなたからの支払いを引き出す許可を与えることに似ています。このプロセスの結果、受取人が後で現金化できる[レジャーのCheckオブジェクト](check.html)が作成されます。 多くの場合、Checkではなく[Payment][]が送信されます。これは、Paymentでは1つのステップで受取人に直接送金できるためです。ただし、指定受取人が[DepositAuth](depositauth.html)を使用している場合はPaymentを直接送信できないため、代替手段としてCheckが適切です。 @@ -38,17 +36,23 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC | `TransactionType` | 文字列 | このフィールドには文字列`CheckCreate`を使用します。 | | `Account` | 文字列(アドレス) | Checkを作成する送金元のアドレス。(あなたのアドレスです。) | | `Destination` | 文字列(アドレス) | Checkを換金できる指定受取人のアドレス。 | -| `SendMax` | 文字列またはオブジェクト(額) | Checkが現金化されるときに送金元から引き出される最大額。XRPの場合、XRPのdrop数を示す文字列を使用します。発行済み通貨の場合、`currency`、`issuer`、および`value` フィールドを含むオブジェクトを使用します。詳細は、[通貨額の指定][]を参照してください。受取人がXRP以外の通貨で正確な額のCheckを換金できるようにし、かつ[送金手数料](transfer-fees.html)を含めるには、送金手数料分の追加パーセンテージを必ず指定してください。(たとえば受取人が送金手数料2%でCheckをイシュアーからの100 CADに現金化できるようにするには、`SendMax`をイシュアーからの102 CADに設定する必要があります。) | +| `SendMax` | 文字列またはオブジェクト(額) | Checkが現金化されるときに送金元から引き出される最大額。XRPの場合、XRPのdrop数を示す文字列を使用します。トークンの場合、`currency`、`issuer`、および`value` フィールドを含むオブジェクトを使用します。詳細は、[通貨額の指定][]を参照してください。受取人がXRP以外の通貨で正確な額のCheckを換金できるようにし、かつ[送金手数料](transfer-fees.html)を含めるには、送金手数料分の追加パーセンテージを必ず指定してください。(たとえば受取人が送金手数料2%でCheckをイシュアーからの100 CADに現金化できるようにするには、`SendMax`をイシュアーからの102 CADに設定する必要があります。) | ### CheckCreateトランザクションの準備の例 -以下の例は、BoxSend SG(rBXsgNkPcDN2runsvWmwxk3Lh97zdgo9za)がGrand Payments(rGPnRH1EBpHeTF2QG8DCAgM7z5pb75LAis)宛てに作成した100 XRPのCheckです。追加(オプション)のメタデータとして、BoxSend SGはGrand Paymentsの請求書のIDを追加しています。これによりGrand PaymentsはこのCheckがどの請求書に対する支払いかを確認できます。 +以下の例は、BoxSend SG(`rBXsgNkPcDN2runsvWmwxk3Lh97zdgo9za`)がGrand Payments(`rGPnRH1EBpHeTF2QG8DCAgM7z5pb75LAis`)宛てに作成した100 XRPのCheckです。追加(オプション)のメタデータとして、BoxSend SGはGrand Paymentsの請求書のIDを追加しています。これによりGrand PaymentsはこのCheckがどの請求書に対する支払いかを確認できます。 +*ripple-lib 1.x* + +```js +{% include '_code-samples/checks/js/prepareCreate.js' %} +``` + *JSON-RPC、WebSocket、またはコマンドライン* -``` +```json { "TransactionType":"CheckCreate", "Account":"rBXsgNkPcDN2runsvWmwxk3Lh97zdgo9za", @@ -58,12 +62,6 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC } ``` -*ripple-lib 1.x* - -```js -{% include '_code-samples/checks/js/prepareCreate.js' %} -``` - ## {{send_n.next()}}.CheckCreateトランザクションへの署名 @@ -75,7 +73,7 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC -*RippleAPI* +*ripple-lib 1.x* ```js {% include '_code-samples/checks/js/signCreate.js' %} @@ -99,7 +97,7 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC -*RippleAPI* +*ripple-lib 1.x* ```js {% include '_code-samples/checks/js/sign-create-resp.txt' %} @@ -129,7 +127,7 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC -*RippleAPI* +*ripple-lib 1.x* ```js {% include '_code-samples/checks/js/submitCreate.js' %} @@ -153,7 +151,7 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC -*RippleAPI* +*ripple-lib 1.x* ```js {% include '_code-samples/checks/js/submit-create-resp.txt' %} @@ -185,13 +183,11 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC トランザクションのメタデータで、`LedgerEntryType`が `"Check"`の`CreatedNode`オブジェクトを探します。これは、トランザクションにより[Checkレジャーオブジェクト](check.html)が作成されたことを示します。このオブジェクトの`LedgerIndex` がCheckのIDです。以下の例ではCheckのIDは`84C61BE9B39B2C4A2267F67504404F1EC76678806C1B901EA781D1E3B4CE0CD9`です。 -**注記:** RippleAPIでは、CheckCreateトランザクションの検索時にCheckのIDが報告されません。この回避策として、以下のRippleAPIコードの例に示すように[Check IDフォーマット](check.html#check-idのフォーマット)からCheckのIDを計算することができます。 - ### 要求の例 -*RippleAPI* +*ripple-lib 1.x* ``` {% include '_code-samples/checks/js/getCreateTx.js' %} @@ -215,7 +211,7 @@ Checkの額と、Checkを現金化できる当事者を決定します。[CheckC -*RippleAPI* +*ripple-lib 1.x* ``` {% include '_code-samples/checks/js/get-create-tx-resp.txt' %} diff --git a/content/tutorials/use-specialized-payment-types/use-checks/use-checks.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/use-checks.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-checks/use-checks.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-checks/use-checks.md diff --git a/content/tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md diff --git a/content/tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.md diff --git a/content/tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.md diff --git a/content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md diff --git a/content/tutorials/use-specialized-payment-types/use-payment-channels.ja.md b/content/@i18n/ja/tutorials/use-specialized-payment-types/use-payment-channels.md similarity index 100% rename from content/tutorials/use-specialized-payment-types/use-payment-channels.ja.md rename to content/@i18n/ja/tutorials/use-specialized-payment-types/use-payment-channels.md diff --git a/content/use-cases/defi/algorithmic-trading.ja.md b/content/@i18n/ja/use-cases/defi/algorithmic-trading.md similarity index 100% rename from content/use-cases/defi/algorithmic-trading.ja.md rename to content/@i18n/ja/use-cases/defi/algorithmic-trading.md diff --git a/content/@i18n/ja/use-cases/defi/index.md b/content/@i18n/ja/use-cases/defi/index.md new file mode 100644 index 0000000000..1a9c4be6b1 --- /dev/null +++ b/content/@i18n/ja/use-cases/defi/index.md @@ -0,0 +1,10 @@ +--- +html: defi-uc.html +parent: use-cases.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +blurb: 中央機関を介さずに、高速で安全な金融トランザクションを可能にします。 +--- +# DeFi + +中央機関を介さずに、高速で安全な金融トランザクションを可能にします。 \ No newline at end of file diff --git a/content/use-cases/defi/list-xrp-as-an-exchange.ja.md b/content/@i18n/ja/use-cases/defi/list-xrp-as-an-exchange.md similarity index 97% rename from content/use-cases/defi/list-xrp-as-an-exchange.ja.md rename to content/@i18n/ja/use-cases/defi/list-xrp-as-an-exchange.md index d5dd129978..49ffbd2296 100644 --- a/content/use-cases/defi/list-xrp-as-an-exchange.ja.md +++ b/content/@i18n/ja/use-cases/defi/list-xrp-as-an-exchange.md @@ -61,7 +61,7 @@ XRPをサポートするために、Alpha Exchangeでは以下を行う必要が ### アカウント -XRPは、XRP Ledgerの _アカウント_ ( _ウォレット_ や _アドレス_ とも呼ばれる)で保持されます。XRP Ledgerのアカウントは、例えばBitcoinのような、アカウントに経費がほとんどまたは一切かからない他のブロックチェーンの台帳とは異なります。XRP Ledgerでは、[アカウントの削除](accounts.html#アカウントの削除)は可能が、各アカウントは個別の、他の人に送信することのできない、[XRPの準備金](reserves.html)を保持する必要があります。このような理由から、Rippleでは利用機関に対し、必要のない過剰なアカウントを作成しないように勧めています。 +XRPは、XRP Ledgerの _アカウント_ ( _ウォレット_ や _アドレス_ とも呼ばれる)で保持されます。XRP Ledgerのアカウントは、例えばBitcoinのような、アカウントに経費がほとんどまたは一切かからない他のブロックチェーンの台帳とは異なります。XRP Ledgerでは、[アカウントの削除](deleting-accounts.html)は可能が、各アカウントは個別の、他の人に送信することのできない、[XRPの準備金](reserves.html)を保持する必要があります。このような理由から、Rippleでは利用機関に対し、必要のない過剰なアカウントを作成しないように勧めています。 @@ -198,7 +198,7 @@ XRPの額は、XRP Ledgerで、符号なし整数の _drop_ として示され _Alpha Exchange_ のような取引所では、XRPは「台帳上」または「台帳外」に存在します。 -* **台帳上のXRP**: XRP保有者のパブリック[アドレス](accounts.html#アドレス)を指定し、パブリックのXRP Ledgerを通じて照会できるXRP。これらの残高の取引相手はXRP Ledgerです。詳細については、[XRP](what-is-xrp.html)を参照してください。 +* **台帳上のXRP**: XRP保有者のパブリック[アドレス](addresses.html)を指定し、パブリックのXRP Ledgerを通じて照会できるXRP。これらの残高の取引相手はXRP Ledgerです。詳細については、[XRP](what-is-xrp.html)を参照してください。 * **台帳外のXRP**: 取引所の会計システムに保持されている、取引所のインターフェイスで照会できるXRP。台帳外のXRP残高はクレジットペースです。取引相手は、XRPを保有している取引所です。 diff --git a/content/@i18n/ja/use-cases/index.md b/content/@i18n/ja/use-cases/index.md new file mode 100644 index 0000000000..5c3a5c2f8b --- /dev/null +++ b/content/@i18n/ja/use-cases/index.md @@ -0,0 +1,9 @@ +--- +html: use-cases.html +parent: docs.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +--- +# ユースケース + +実践的なユースケースに基づいたドキュメントをご覧ください。 \ No newline at end of file diff --git a/content/@i18n/ja/use-cases/payments/index.md b/content/@i18n/ja/use-cases/payments/index.md new file mode 100644 index 0000000000..3e6aeb842e --- /dev/null +++ b/content/@i18n/ja/use-cases/payments/index.md @@ -0,0 +1,10 @@ +--- +html: payments-uc.html +parent: use-cases.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +blurb: XRP Ledgerで様々なタイプの支払いを利用するための実例を紹介します。 +--- +# Payment + +XRP Ledgerで様々なタイプの支払いを利用するための実例を紹介します。 \ No newline at end of file diff --git a/content/use-cases/payments/peer-to-peer-payments-uc.ja.md b/content/@i18n/ja/use-cases/payments/peer-to-peer-payments-uc.md similarity index 100% rename from content/use-cases/payments/peer-to-peer-payments-uc.ja.md rename to content/@i18n/ja/use-cases/payments/peer-to-peer-payments-uc.md diff --git a/content/use-cases/payments/restricting-deposits-uc.ja.md b/content/@i18n/ja/use-cases/payments/restricting-deposits-uc.md similarity index 100% rename from content/use-cases/payments/restricting-deposits-uc.ja.md rename to content/@i18n/ja/use-cases/payments/restricting-deposits-uc.md diff --git a/content/use-cases/payments/smart-contracts-uc.ja.md b/content/@i18n/ja/use-cases/payments/smart-contracts-uc.md similarity index 100% rename from content/use-cases/payments/smart-contracts-uc.ja.md rename to content/@i18n/ja/use-cases/payments/smart-contracts-uc.md diff --git a/content/use-cases/tokenization/authorized-minter.ja.md b/content/@i18n/ja/use-cases/tokenization/authorized-minter.md similarity index 100% rename from content/use-cases/tokenization/authorized-minter.ja.md rename to content/@i18n/ja/use-cases/tokenization/authorized-minter.md diff --git a/content/use-cases/tokenization/digital-artist.ja.md b/content/@i18n/ja/use-cases/tokenization/digital-artist.md similarity index 100% rename from content/use-cases/tokenization/digital-artist.ja.md rename to content/@i18n/ja/use-cases/tokenization/digital-artist.md diff --git a/content/@i18n/ja/use-cases/tokenization/index.md b/content/@i18n/ja/use-cases/tokenization/index.md new file mode 100644 index 0000000000..c4078590f7 --- /dev/null +++ b/content/@i18n/ja/use-cases/tokenization/index.md @@ -0,0 +1,10 @@ +--- +html: tokenization.html +parent: use-cases.html +top_nav_grouping: カテゴリ +template: pagetype-category.html.jinja +blurb: XRP Ledgerが対応する様々なトークンを使用できます。 +--- +# Tokenization + +XRP Ledgerが対応する様々なトークンを使用できます。 \ No newline at end of file diff --git a/content/use-cases/tokenization/nft-mkt-overview.ja.md b/content/@i18n/ja/use-cases/tokenization/nft-mkt-overview.md similarity index 100% rename from content/use-cases/tokenization/nft-mkt-overview.ja.md rename to content/@i18n/ja/use-cases/tokenization/nft-mkt-overview.md diff --git a/content/use-cases/tokenization/nftoken-marketplace.ja.md b/content/@i18n/ja/use-cases/tokenization/nftoken-marketplace.md similarity index 100% rename from content/use-cases/tokenization/nftoken-marketplace.ja.md rename to content/@i18n/ja/use-cases/tokenization/nftoken-marketplace.md diff --git a/content/use-cases/tokenization/stablecoin-issuer.ja.md b/content/@i18n/ja/use-cases/tokenization/stablecoin-issuer.md similarity index 100% rename from content/use-cases/tokenization/stablecoin-issuer.ja.md rename to content/@i18n/ja/use-cases/tokenization/stablecoin-issuer.md diff --git a/content/XRPL_Logo_Kit.zip b/content/XRPL_Logo_Kit.zip deleted file mode 100644 index dfdbec98ba..0000000000 Binary files a/content/XRPL_Logo_Kit.zip and /dev/null differ diff --git a/content/_api-examples/ledger-clio/jsonrpc-diff-response.json b/content/_api-examples/ledger-clio/jsonrpc-diff-response.json new file mode 100644 index 0000000000..8b8108b3de --- /dev/null +++ b/content/_api-examples/ledger-clio/jsonrpc-diff-response.json @@ -0,0 +1,91 @@ +{ + "result": { + "ledger_hash": "0C445F6F348AA5FF25A631C904F7277980F7FD2A6BACBB3A74FCF95F671D4884", + "ledger_index": 82681558, + "validated": true, + "ledger": { + "account_hash": "60BF81E9BCA5CEDB629B8D19DE0791F13318B4C6B6886E35A211824F9EB04DE5", + "close_flags": 0, + "close_time": 748569330, + "close_time_human": "2023-Sep-20 23:55:30.000000000 UTC", + "close_time_resolution": 10, + "closed": true, + "ledger_hash": "0C445F6F348AA5FF25A631C904F7277980F7FD2A6BACBB3A74FCF95F671D4884", + "ledger_index": "82681558", + "parent_close_time": 748569321, + "parent_hash": "817E4F1791BE34C1214E78E02CAB794C54615F69E765D140D0BD820EA81BF0E9", + "total_coins": "99988406204421588", + "transaction_hash": "2D7808600F9CF57E263EC1EC4AA7357586AE949908EA7DBF023D241812CDC9B5", + "diff": [ + { + "object_id": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400", + "object": { + "ExchangeRate": "4f0e155af07e5400", + "Flags": 0, + "Indexes": [ + "4CF31E76F470F4CBE7E7EDD1973CDFA564A59672D14C577C51517A1E3469E53A" + ], + "LedgerEntryType": "DirectoryNode", + "RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "000000000000000000000000434E590000000000", + "TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A", + "index": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400" + } + }, + ... (trimmed for length) ... + { + "object_id": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC", + "object": { + "ExchangeRate": "5b0a3845ae4ff3fc", + "Flags": 0, + "Indexes": [ + "7C085618D0A2BC3A8919A032699A2219C08D112CC4020E615CE37C4ABE31A13C" + ], + "LedgerEntryType": "DirectoryNode", + "RootIndex": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC", + "TakerGetsCurrency": "0000000000000000000000005553440000000000", + "TakerGetsIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230", + "TakerPaysCurrency": "0000000000000000000000000000000000000000", + "TakerPaysIssuer": "0000000000000000000000000000000000000000", + "index": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC" + } + }, + { + "object_id": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A395385B74F22", + "object": "" + }, + { + "object_id": "F97B88D103742E8C7CBDB982FF8843DC9E128E968668837B9468B1DB47EABBDC", + "object": { + "Account": "r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE", + "BookDirectory": "623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F12ED4BF0EFEAD9", + "BookNode": "0", + "Flags": 0, + "LedgerEntryType": "Offer", + "OwnerNode": "0", + "PreviousTxnID": "15D26953F0CE5216DC8BC7123E3DB8C8EC210D6127A7F34E182318206E0F2DFE", + "PreviousTxnLgrSeq": 82681558, + "Sequence": 132450778, + "TakerGets": "3677818937", + "TakerPays": { + "currency": "CNY", + "issuer": "rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK", + "value": "19593.43327917432" + }, + "index": "F97B88D103742E8C7CBDB982FF8843DC9E128E968668837B9468B1DB47EABBDC" + } + } + ] + }, + "status": "success" + }, + "warnings": [ + { + "id": 2001, + "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request" + } + ] +} + diff --git a/content/_api-examples/ledger-clio/jsonrpc-request.json b/content/_api-examples/ledger-clio/jsonrpc-request.json new file mode 100644 index 0000000000..ba101ea50f --- /dev/null +++ b/content/_api-examples/ledger-clio/jsonrpc-request.json @@ -0,0 +1,12 @@ +{ + "method": "ledger", + "params": [ + { + "ledger_index": "validated", + "transactions": false, + "expand": false, + "owner_funds": false, + "diff": false + } + ] +} diff --git a/content/_api-examples/ledger-clio/jsonrpc-response.json b/content/_api-examples/ledger-clio/jsonrpc-response.json new file mode 100644 index 0000000000..03c08937f6 --- /dev/null +++ b/content/_api-examples/ledger-clio/jsonrpc-response.json @@ -0,0 +1,28 @@ +{ + "result": { + "ledger_hash": "4E2F27F997943EAF522FB0D6AE4B25B1F54FDDE531E0469EF436B18391CFC7D9", + "ledger_index": 82681548, + "validated": true, + "ledger": { + "account_hash": "608FCCDB3261FEF57B6EB76C89E3FE11B7C8D198DF443831BABF33D08FC8C12A", + "close_flags": 0, + "close_time": 748569290, + "close_time_human": "2023-Sep-20 23:54:50.000000000 UTC", + "close_time_resolution": 10, + "closed": true, + "ledger_hash": "4E2F27F997943EAF522FB0D6AE4B25B1F54FDDE531E0469EF436B18391CFC7D9", + "ledger_index": "82681548", + "parent_close_time": 748569282, + "parent_hash": "DCECE701AE72CD9E3C1161EC6C98048DFF5797045CD49AD6038BE6D4610EED93", + "total_coins": "99988406204467365", + "transaction_hash": "95491C538DC25D4980AADC5E2ABAB90E1D4E20A02E772EA6A1C514BFC19987E4" + }, + "status": "success" + }, + "warnings": [ + { + "id": 2001, + "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request" + } + ] +} diff --git a/content/_api-examples/ledger-clio/wsrpc-request.json b/content/_api-examples/ledger-clio/wsrpc-request.json new file mode 100644 index 0000000000..1229e0d357 --- /dev/null +++ b/content/_api-examples/ledger-clio/wsrpc-request.json @@ -0,0 +1,9 @@ +{ + "id": 14, + "command": "ledger", + "ledger_index": "validated", + "transactions": false, + "expand": false, + "owner_funds": false, + "diff": false +} diff --git a/content/_api-examples/ledger-clio/wsrpc-response.json b/content/_api-examples/ledger-clio/wsrpc-response.json new file mode 100644 index 0000000000..f7897a7863 --- /dev/null +++ b/content/_api-examples/ledger-clio/wsrpc-response.json @@ -0,0 +1,29 @@ +{ + "result": { + "ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7", + "ledger_index": 82681623, + "validated": true, + "ledger": { + "account_hash": "39D34D858A0FD652143ED84B67A09193772DE0CCEBD2D63619E679293B7A3388", + "close_flags": 0, + "close_time": 748569571, + "close_time_human": "2023-Sep-20 23:59:31.000000000 UTC", + "close_time_resolution": 10, + "closed": true, + "ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7", + "ledger_index": "82681623", + "parent_close_time": 748569570, + "parent_hash": "674FF6C68956E06CB9628833677C3DD71824C87C0AEFB487984CF98C3964DAEE", + "total_coins": "99988406188847858", + "transaction_hash": "11EE9C448D6B07B88A80B4FC7935B485E513816B3B47D0976CE9F51E7CF10A85" + } + }, + "status": "success", + "type": "response", + "warnings": [ + { + "id": 2001, + "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request" + } + ] +} diff --git a/content/_api-examples/ledger/jsonrpc-response.json b/content/_api-examples/ledger/jsonrpc-response.json new file mode 100644 index 0000000000..b8730a95fb --- /dev/null +++ b/content/_api-examples/ledger/jsonrpc-response.json @@ -0,0 +1,22 @@ +{ + "result": { + "ledger": { + "account_hash": "23C1C8F8ACCEFACBDD9A1804CC25E652A324F9EABD7D0BEF103DA56D6E0306E7", + "close_flags": 0, + "close_time": 752188801, + "close_time_human": "2023-Nov-01 21:20:01.000000000 UTC", + "close_time_resolution": 10, + "closed": true, + "ledger_hash": "140B769E9ED61FCD675A6EEC1F005084614314C1D675C2CFDD11A1024BBD2C96", + "ledger_index": "83626952", + "parent_close_time": 752188800, + "parent_hash": "7D169A530960AFA8A0E38D036D8EF960BC2C2E02C4A0CE848A4200B9376AC99C", + "total_coins": "99988256304478252", + "transaction_hash": "77226182F58D9B5C798262F0E9D8C575D174E434F0C3C7119FB658BA70004CE9" + }, + "ledger_hash": "140B769E9ED61FCD675A6EEC1F005084614314C1D675C2CFDD11A1024BBD2C96", + "ledger_index": 83626952, + "status": "success", + "validated": true + } +} diff --git a/content/_api-examples/ledger/ws-response.json b/content/_api-examples/ledger/ws-response.json new file mode 100644 index 0000000000..129103171b --- /dev/null +++ b/content/_api-examples/ledger/ws-response.json @@ -0,0 +1,24 @@ +{ + "id": "example_ledger_req", + "result": { + "ledger": { + "account_hash": "B8B2C0C3F9E75E3AEE31D467B2544AB56244E618890BA58679707D6BFC0AF41D", + "close_flags": 0, + "close_time": 752188602, + "close_time_human": "2023-Nov-01 21:16:42.000000000 UTC", + "close_time_resolution": 10, + "closed": true, + "ledger_hash": "1BEECD5D21592EABDEF98D8E4BC038AD10B5700FF7E98011870DF5D6C2A2F39B", + "ledger_index": "83626901", + "parent_close_time": 752188601, + "parent_hash": "6B32CFC42B32C5FB90019AE17F701D96B499A4C8E148A002E18135A434A19D98", + "total_coins": "99988256314388830", + "transaction_hash": "21586C664DC47E12AF34F22EBF1DB55D23F8C98972542BAC0C39B1009CAC84D4" + }, + "ledger_hash": "1BEECD5D21592EABDEF98D8E4BC038AD10B5700FF7E98011870DF5D6C2A2F39B", + "ledger_index": 83626901, + "validated": true + }, + "status": "success", + "type": "response" +} diff --git a/content/_api-examples/tx/jsonrpc-response-ctid.json b/content/_api-examples/tx/jsonrpc-response-ctid.json new file mode 100644 index 0000000000..76e0bc15f2 --- /dev/null +++ b/content/_api-examples/tx/jsonrpc-response-ctid.json @@ -0,0 +1,120 @@ +{ + "result": { + "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "Amount": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "1" + }, + "Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "Fee": "10", + "Flags": 0, + "Paths": [ + [ + { + "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "currency": "USD", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "type": 49 + } + ], + [ + { + "account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "currency": "USD", + "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "type": 49 + }, + { + "account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "currency": "USD", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "type": 49 + }, + { + "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "currency": "USD", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "type": 49 + } + ] + ], + "SendMax": { + "currency": "USD", + "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "value": "1.01" + }, + "Sequence": 88, + "SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E", + "TransactionType": "Payment", + "TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0", + "ctid": "C005523E00000000", + "date": 416445410, + "hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", + "inLedger": 348734, + "ledger_index": 348734, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "Balance": "59328999119", + "Flags": 0, + "OwnerCount": 11, + "Sequence": 89 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06", + "PreviousFields": { + "Balance": "59328999129", + "Sequence": 88 + }, + "PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E", + "PreviousTxnLgrSeq": 348700 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-1" + }, + "Flags": 131072, + "HighLimit": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "100" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "value": "0" + }, + "LowNode": "0" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "0" + } + }, + "PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8", + "PreviousTxnLgrSeq": 343570 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "unavailable" + }, + "status": "success", + "validated": true + } +} diff --git a/content/_api-examples/tx/jsonrpc-response-hash.json b/content/_api-examples/tx/jsonrpc-response-hash.json new file mode 100644 index 0000000000..93007cf1a3 --- /dev/null +++ b/content/_api-examples/tx/jsonrpc-response-hash.json @@ -0,0 +1,118 @@ +{ + "result": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 56865248, + "OfferSequence": 5037708, + "Sequence": 5037710, + "SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE", + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + }, + "TransactionType": "OfferCreate", + "TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9", + "ctid": "C363B1DD00000000", + "date": 648248020, + "hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", + "inLedger": 56865245, + "ledger_index": 56865245, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "ExchangeRate": "4f04c66806cf7400", + "Flags": 0, + "RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "000000000000000000000000434E590000000000", + "TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "Balance": "10404767991", + "Flags": 0, + "OwnerCount": 3, + "Sequence": 5037711 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2", + "PreviousFields": { + "Balance": "10404768003", + "Sequence": 5037710 + }, + "PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008", + "PreviousTxnLgrSeq": 56865244 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C", + "PreviousTxnLgrSeq": 56865244, + "Sequence": 5037708, + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "IndexNext": "0", + "IndexPrevious": "0", + "Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" + } + }, + { + "CreatedNode": { + "LedgerEntryType": "Offer", + "LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B", + "NewFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "Sequence": 5037710, + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + } + } + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "status": "success", + "validated": true + } +} diff --git a/content/_api-examples/tx/ws-response-ctid.json b/content/_api-examples/tx/ws-response-ctid.json new file mode 100644 index 0000000000..30ccc5178d --- /dev/null +++ b/content/_api-examples/tx/ws-response-ctid.json @@ -0,0 +1,122 @@ +{ + "id": "CTID example", + "result": { + "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "Amount": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "1" + }, + "Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "Fee": "10", + "Flags": 0, + "Paths": [ + [ + { + "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "currency": "USD", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "type": 49 + } + ], + [ + { + "account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "currency": "USD", + "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "type": 49 + }, + { + "account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "currency": "USD", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "type": 49 + }, + { + "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "currency": "USD", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "type": 49 + } + ] + ], + "SendMax": { + "currency": "USD", + "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "value": "1.01" + }, + "Sequence": 88, + "SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E", + "TransactionType": "Payment", + "TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0", + "ctid": "C005523E00000000", + "date": 416445410, + "hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", + "inLedger": 348734, + "ledger_index": 348734, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "Balance": "59328999119", + "Flags": 0, + "OwnerCount": 11, + "Sequence": 89 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06", + "PreviousFields": { + "Balance": "59328999129", + "Sequence": 88 + }, + "PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E", + "PreviousTxnLgrSeq": 348700 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-1" + }, + "Flags": 131072, + "HighLimit": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "100" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "value": "0" + }, + "LowNode": "0" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "0" + } + }, + "PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8", + "PreviousTxnLgrSeq": 343570 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "unavailable" + }, + "validated": true + }, + "status": "success", + "type": "response" + } diff --git a/content/_api-examples/tx/ws-response-hash.json b/content/_api-examples/tx/ws-response-hash.json new file mode 100644 index 0000000000..a7dc79c017 --- /dev/null +++ b/content/_api-examples/tx/ws-response-hash.json @@ -0,0 +1,120 @@ +{ + "id": 1, + "result": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 56865248, + "OfferSequence": 5037708, + "Sequence": 5037710, + "SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE", + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + }, + "TransactionType": "OfferCreate", + "TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9", + "ctid": "C363B1DD00000000", + "date": 648248020, + "hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", + "inLedger": 56865245, + "ledger_index": 56865245, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "ExchangeRate": "4f04c66806cf7400", + "Flags": 0, + "RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "000000000000000000000000434E590000000000", + "TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "Balance": "10404767991", + "Flags": 0, + "OwnerCount": 3, + "Sequence": 5037711 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2", + "PreviousFields": { + "Balance": "10404768003", + "Sequence": 5037710 + }, + "PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008", + "PreviousTxnLgrSeq": 56865244 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C", + "PreviousTxnLgrSeq": 56865244, + "Sequence": 5037708, + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "IndexNext": "0", + "IndexPrevious": "0", + "Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" + } + }, + { + "CreatedNode": { + "LedgerEntryType": "Offer", + "LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B", + "NewFields": { + "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", + "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", + "Sequence": 5037710, + "TakerGets": "15000000000", + "TakerPays": { + "currency": "CNY", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", + "value": "20160.75" + } + } + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "validated": true + }, + "status": "success", + "type": "response" +} diff --git a/content/_api-examples/vl/vl.json b/content/_api-examples/vl/vl.json index 380d5fb39d..00033459a5 100644 --- a/content/_api-examples/vl/vl.json +++ b/content/_api-examples/vl/vl.json @@ -1,6 +1,7 @@ { - "manifest": "JAAAAAFxIe0md6v/0bM6xvvDBitx8eg5fBUF4cQsZNEa0bKP9z9HNHMh7V0AnEi5D4odY9X2sx+cY8B3OHNjJvMhARRPtTHmWnAhdkDFcg53dAQS1WDMQDLIs2wwwHpScrUnjp1iZwwTXVXXsaRxLztycioto3JgImGdukXubbrjeqCNU02f7Y/+6w0BcBJA3M0EOU+39hmB8vwfgernXZIDQ1+o0dnuXjX73oDLgsacwXzLBVOdBpSAsJwYD+nW8YaSacOHEsWaPlof05EsAg==", "blob" : "eyJzZXF1ZW5jZSI6NjAsImV4cGlyYXRpb24iOjY0NDM3MTIwMCwidmFsaWRhdG9ycyI6W3sidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ0NUU4MEEwNEQ3OUNCOURGMDBBRUJEODZEQ0RDMTY4NkQ2NDE5RUE5RTVFMEU3MUYxQTgxN0UwOEI1MDc2QTU1IiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMUY2QW9FMTV5NTN3Q3V2WWJjM0JhRzFrR2VxZVhnNXg4YWdYNEl0UWRxVlhNaEF4Wm8xNTdwY0I5ZGU2U21rN2hvSzN3TkNBcjRhRlp0ZkFQaTdDRTRtTkpsZGtjd1JRSWhBTGxWalhDZml5L210WEJXc050Nzd0NGpLY05FQnBSVjh6ditTcFU1bENoMEFpQmE4dm84eHhwdmlZbGY0emRHK25RaEIyT2dma1FaWlBNSE90N0NhWHpYZ1hBU1FMOE81cDA4M21nNEtLTDh1WmZNYVVxZGd6dUowR3RhMWx5VVdQY3RUUEN4WTEzNVh3SytuSkFkRnNJVUZOSjlNUGpucENtU2pZVnpWYTZNNS9uQWNBST0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVERDhDODg2NDI3OTVDRTY5QzVCNzgwRTAxNzAyQzM3MEY5NTA3RDBCNjQ0MzNGMTdFRkU3MEYyNjM3QTQwQURCNyIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTNZeUlaQ2VWem1uRnQ0RGdGd0xEY1BsUWZRdGtRejhYNytjUEpqZWtDdHQzTWhBbkZmcityOUJYZHNYRS9jQmxKTXlkL1hzTzFBNVhFWUNjdHJzdkxFWCtEbWRrY3dSUUloQU5SY1JNZzlTQVhvYU92SERaMmF2OVJ6RWFaYVZFTmZRaVZnc2krT3gzRjBBaUIyc25TSU9tNmM0L2luYnRVMFVtV0xRVHp1d2tPZFVGUElCOEF4OGRtR3VIQVNRTVVJZlhNajk2a2NGVFNKbk1GQy9tVy9BUThiS1hrRnJyazBDVVRGRkt3ZUVqVHErU1RyRmk2cUxMMk1UN252ZUd4c1hCQ2d6dGpjMHFHYXM5S0ZXZ009In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREJERUI5MDFGN0M3NUQwRTIwQzZDNDJBRjAzQkUwREE0MDM3N0FGMTkzOUExOEIzQ0IzNjc5NjYxREQ1RjlGNzQiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUyOTY1QWZmSFhRNGd4c1FxOER2ZzJrQTNldkdUbWhpenl6WjVaaDNWK2ZkSE1oQWczY3lLTlBNUHFLZ1I3a0lpN2MvOEdML1lnZEJ0ZzRtU0FXdndtYWV2Vkdka1l3UkFJZ1d6RzhHcVlnM1lwd0RzOHhYYTlYcUxIc3M3NktUMnVBSFJoVVhGVlVxQ1FDSUcyRXZiRktueGV6UmQ5Y3BQSFN0MzJIWEsrUDQrYUwzcDIrdnFsQ3hSUjljQkpBYm9YVG1ZVGF5b2NBM3pmOWRXRVh0eWFlT0dDMWs1V2RZVVJ6UGxlZXZ2YWxSNHhWb1h6czM4aUdQeEZyL3BBOW5MK000ZHV1MEdLQ0hsVmlyK2ZCQWc9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURBMTc4NzFFNzJCMEM1NzBBQzQzNDVDNjBDRjAyQUZCQkI3NDBBNjMxQjdBRDBFMUU1NzMyMTY1NzREOUFFQTAyIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMmhlSEhuS3d4WENzUTBYR0RQQXErN3QwQ21NYmV0RGg1WE1oWlhUWnJxQW5NaEFvanl1emd0cmVRa3hRajhwckh4T3NiRGNGNWZ1NFhYYjBLeEVML1BxNUhoZGtjd1JRSWhBTmZQRExaUDQ3YUNXd3Q1a0JucDc1QnV1Q2dwOWM0QmZKUGQ2NlNGQ3c2MUFpQUp2ZWdCdnZQSXJlYytYT1N6S1JmaTV1dVhXeHRsOUV5cjJhUEJZWHZiUkhBU1FNVUxZRW83YmVSZm9VQ25qazFzVFl5WTkxdExJR0xnbm5hV1hoVW04MCt6czVJR2VnazhxaWpLQXRCT011QkM3MWxBQjRLaEpjK2RCMnJwTU9GYzVndz0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVERjQ2RUUyN0FEMEUxQTcxNEFGRUNEQTgxNkVBQjcxMTQ2MTRGQ0I5MkQwQ0I0RDk3QjZBODhFRDQzNDM0QUZDOSIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTMwYnVKNjBPR25GSy9zMm9GdXEzRVVZVS9Ma3RETFRaZTJxSTdVTkRTdnlYTWhBdzBBVFdqVlR0NEZmZUtPN2t2NmZGZ2QvZ28yK2Q1QlN5VWNVUm1SV25UdGRrY3dSUUloQU13T2dEZWM3UVlZTm5nc3BnOTB3RXZWYnNvaDJ1eDE0UlBUdytHSGFYTmxBaUFMZ2ZFc3orQUY0ZXlYL1k1aTQ0VnJGakZGSU1XVWZPWmFRSnRzeHRlTTFYQVNRTE9hRjB0MlpwcVZLZDhKRVNRVlkrelU1NjdpQUFHMmFtVFBaeDk1ODc1UzlBNlBsK2tINVRHSE1BZVdqZ1dTcWZoM20ySEJKWDdOSWNYYjk4dnk5QUE9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDZFNEM0MUU1OUZGQkVCNTE3MjZFNTQ0Njg1MDJGRTY0MzcyMzhGQTc4RUE1MTYzNEU3QkYwRDA5MTcxQUVFOEYiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxdVRFSGxuL3ZyVVhKdVZFYUZBdjVrTnlPUHA0NmxGalRudncwSkZ4cnVqM01oQXV6dEdXYi9PaTEvVjVtNWR1aldyOUhtYktSeUs0WFlrK2ttdUZQU2dBRnJka1l3UkFJZ2ZRK0JnWFg2UWJsWnk0SDA1bzdHUFNJd3FTN1FRUlVXN2RxRjU0SUFpaU1DSUg0WGZMdzk1NmlFYW94Wk9rN0tjdGluMlg5aE1mYUxON3d5czl5QVVGb1pjQkpBdWVFaTg0WFIzTGwxR0xKV2FuVzFnMU1kVWovMFBBeEpidzZFRVFSdUczemRudVJITlhsZDZVWkFiSWtWY1AwenRmcXVsQnpqYmNzTERPS0ZFaWNTQmc9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURCNkZDOEU4MDNFRThFREMyNzkzRjFFQzkxN0IyRUU0MUQzNTI1NTYxOERFQjkxRDNGOUIxRkM4OUI3NUQ0NTM5IiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMjIvSTZBUHVqdHduay9Ic2tYc3U1QjAxSlZZWTNya2RQNXNmeUp0MTFGT1hNaEE4VmR2SEZ5U2NCeVFHVFlOR2VPdkIwKzY3Z1dhcWVmY2Z2Ums1K0t3Z1YxZGtZd1JBSWdaRnVsTy9BaU1vY3puZzZpLzRCa2Z6VDdqOWx4RjRQUDF1ZmdyT1FhSjhzQ0lCWC9FOFpicG43dFdxZ0F5TnlXcFZQa2hGbWFVTXFFcnk4V29VVDFmZEdRY0JKQXY1MVJxSnhnZy9Wcm5yWndpTEsyRGMwQ0tiaUxQTzVISjRaTXNqZFBUMmdSYzk3cldrQVh1VjJMNlBORk81OXh5dW9hWm1TTWxaWXZxU0dQcGZGN0J3PT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENjkxMzAzOTkyRkVDNjRFNkJDNEJBQ0QzNkFFNkU1QUVEQzIzRjI4NjFCNkQ4RUZCOUZENzdFRTNFQURFMzQzNSIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTFwRXdPWkwreGs1cnhMck5OcTV1V3UzQ1B5aGh0dGp2dWYxMzdqNnQ0ME5YTWhBaTJBWEpRZ28vSnVXM3I3Zi82Q2NWc0dOMVltSWoxMUdpSUVTSEJuUVNrOGRrY3dSUUloQU5DREVReW1yZDZ2ZVQzb3VhY0Y2ZmhCcjV3THczR21YZzFyTUNMVnZCelpBaUE4dVdRK3RxZDQ2V21mQmV4alNCUTJKZDZVQUdkckh2amNDUTJaZ1Nvb0NuQVNRRmtIbCtENy9VM1dCeVlQMzg0K3BjRkRmMkdpNFdJUkhWVG81OGNxZGs1Q0Rpd2MxVDByRG9MaG1vNDFhM2YrZHNmdGZ3UjRhTW13RmNQWExucmpyQUk9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREFEMTY2NjdGMDE4NUREQkI3RkE2NUIyMkY0QjdEMzEwQkY1QzNFMkQ5QjgyM0ZCMDZBM0E0MUFGOEFDODNCQzEiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUydEZtWi9BWVhkdTMrbVd5TDB0OU1RdjF3K0xadUNQN0JxT2tHdmlzZzd3WE1oQXF3ZUUzUElTM0U0NEtoTXFLakt0YmtCZThIOEdiaXVvQVhBWURSb1ZSSG9ka1l3UkFJZ2FnR2tYdG93VXliZGx0S29qdjBsdnZmbHJsUTlJUm5QT2pla0Y2MGlIemdDSUNnNlpvY0lNemtVdXZPOTFCRW9ybUlXbVg0Ry9NR1QyenJvNkkvUHZCOFhjQkpBY0pMWGt0L3cva2N3RXZOaVptaTJpMm5NbjF3aVAzTFM5TkpqQlBqdThLRkxBTWcwTzl5ZFFUNjdVL0FMWU9lVFBUTzIvaTJZdzlPU2xpYnRxaGd6REE9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURDMjQ1MDI3QTUyRUU1MzE4MDk1NTk4RUMzQUI2NUZGNEEzQjlGOTQyOEUxMEIyRjNDNkYzOURFMTVBMTVDOTBBIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllM0NSUUo2VXU1VEdBbFZtT3c2dGwvMG83bjVRbzRRc3ZQRzg1M2hXaFhKQ25NaEEvOC85cktVZEE2MWovZklFUC9jcUxweEJsbUloUDJyZzFkN05hRVB5S1YrZGtjd1JRSWhBSXhFME0vRko1MHZmWlc2ZlBweTR5Q1p1bVk5bjBvYnJPb2pVa2ptNTVhMEFpQmo1Nk8wTXBvcEdvWTlIeEMvKzR3Tk8zNkhvN0U5Q1FlSHNuS3JlRGRzQVhBU1FJWVVkODFqYmlWVWxFVDRkR29HMnArY2YrMkdxRVhYNWZKTVNTeVgvcWUwWGZSNGNPKzRxbGdtak1RZENSREJXQUJIVnZkTi95WnlpL3JMMmMrV3JRYz0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENDI0NkFBM0FFOUQyOTg2Mzk0NDgwMENDQTkxODI5RTQ0NDc0OThBMjBDRDlDMzk3M0E2QjU5MzQ2Qzc1QUI5NSIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTFDUnFvNjZkS1lZNVJJQU15cEdDbmtSSFNZb2d6Wnc1YzZhMWswYkhXcmxYTWhBa20xbHowYzhRWFdmSjliMXZCNzJkTGFidzh3WUlkOE10bnBzSEhCRUM4cGRrWXdSQUlnUWxiNkhKNTNoc1RBZlZpZCtBT2RCVnZNRjdyYWhJS05MQkhVZ241MnpCRUNJR0xVcUZ1OGExQUFIUkpjVm9uS1lFbm1oSndiQ1hMbitqZTduYTFXRDEvb2NCSkFFNHZmdnJHU21aQzJ1QVVHbU01ZElCdG9TZ0VVZXkrMlZsZURZRXNjZTk0dHhZY2pSOFo3UUxOYWxpRDh3L2JENS9odllROG1lVjFXZzFqSkZOZTBDQT09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDJDMTQ2OEI0QTExRDI4MUY5M0VGMzM3Qzk1RTRBMDhERjAwMDBGREVGQjZEMEVBOUJDMDVGQkQ1RDYxQTFGNUEiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUwc0ZHaTBvUjBvSDVQdk0zeVY1S0NOOEFBUDN2dHREcW04QmZ2VjFob2ZXbk1oQWtNVW1DRDJhUG1nRkREUm1pbXZTaWNTSVNjdzZZTnI0MkR3NFJBZHdyT0Fka2N3UlFJaEFKRk9ITWc2cVRHOHY2MGRocmVuWVlrNmN3T2FSWHEwUk5tTGp5eUNpejVsQWlBZFUwWWtEVUpRaG5OOFJ5OHMrNnpUSkxpTkxidE04b08vY0xudXJWcFJNM0FTUUdBTGFySEFzSmtTWlF0R2RNMkFhUi9qb0ZLL2poRFU1NytsK1JTWWpyaS95ZEUyMERhS2Fud2tNRW9WbEJUZzdsWDRoWWpFbm1rcW83M3dJdGhMT0FRPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURBNTRDODVGOTEyMTlGRDI1OTEzNEI2QjEyNkFENjRBRTcyMDRCODFERDQwNTI1MTA2NTdFMUE1Njk3MjQ2QUQyIiwibWFuaWZlc3QiOiJKQUFBQUhseEllMmxUSVg1RWhuOUpaRTB0ckVtcldTdWNnUzRIZFFGSlJCbGZocFdseVJxMG5NaEF1QW0va0x1VEhtY09hRHJ1SkJqS2pXT3AxVXRHdU84Q0lDdFJwNHZvNEhHZGtjd1JRSWhBUDFTUGNLdU1sR0dEZTVyY1FBZjF4L0JtblZ0QklHNEh2OVVTNWIvR3laQ0FpQSswM2NadTkrRUJxU1p1ZUY1bEFVU1BZL0hSZkw3cHF4d244OWZTNEFGQTNBU1FKcStRUlVQK2FYQjJpTXhackVhanlTeEdzN0NOcHVjeXB0V1YwYm5hcTdpbG5mVUN2TWxmc3pxNW1WMHJhaEI4OUMyekFuZjdGakgwQ3gwQk1MMjlRQT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEOUFFNEY1ODg3QkEwMjlFQjdDMDg4NDQ4NkQyM0NGMjgxOTc1Rjc3M0Y0NEJEMjEzMDU0MjE5ODgyQzQxMUNDNyIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTJhNVBXSWU2QXA2M3dJaEVodEk4OG9HWFgzYy9STDBoTUZRaG1JTEVFY3gzTWhBbUcyemd2OEZCWnNaSlU4YVBhcHdvOWNJcVF2NC9NU1Mxb1ZBNWVWTWl3TGRrWXdSQUlnRitMT2U0ZVkwZ3A5dHRxaDJnbnYrejc1T3FMeU9RTXBHUEFMZ20rTnRPc0NJQ0RYQlpWUHRwcm1CRGtCSmtQRlNuRTU1RDllS1lSSDh6L2lZMUV0cE5wbGNCSkFBREVXR1ZUODBPd2hkMWxoMkpzVS9vWmxtZU5GNVdON1l2bEI4bGxFeGFSS0VWQytHVzlXZytpTklRM3JtVjdQOGFOYVZ1YWFiRzAwZk9na2d6TmhEdz09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREE4RDI5RjQwQ0VCMjg5OTU2MTc2NDFBM0JDNDI2OTJFMURFODgzMjE0RjYxMkZCQjYyMDg3QTE0OEU1RjZGOUEiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUybzBwOUF6cktKbFdGMlFhTzhRbWt1SGVpRElVOWhMN3RpQ0hvVWpsOXZtbk1oQW5ZblA3RWc2VmdObkVVVFJFMjlkNjRqUVQvaUJjV1RRdE5yVXp5RDZNSitka2N3UlFJaEFPRXNWNWFuVGtsb1NtVFpSYmltTXlCS3FIb0pZWGNCQmU4bExpUFlDN21VQWlBejJhTk9wZlEvMUx5Y1dsb0lNdmRoeHppbnE1WDdVYXMvdU9TYjl3aDhkM0FTUUxWa2ZwVy9HTzZ3ZFQ2QXV1U0o1NlR0TTM0M3BETkgraVN6eGx0SWZkclBpVXhUNXJmNGsyMWxRUXVQQ2xYbTkrU2ZLckNpVVhaSzdkajAvR1dUWVFnPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQzOEIwMjg4RUEyNDBCNENERUMxOEExQTYyODlFQjQ5MDA3RTRFQkMwREU5NDQ4MDNFQjdFRjE0MUM1NjY0MDczIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMDRzQ2lPb2tDMHpld1lvYVlvbnJTUUIrVHJ3TjZVU0FQcmZ2RkJ4V1pBYzNNaEFnT0tjdkl1Y2hhbHJady9nbFR1T3hWM0lPQ2Nwb3J4TUI3SnFBVnVwazFlZGtjd1JRSWhBT3ZSenBlK0lZWksxTXlJbklRWjg3SnZQMko4U0lYQ1haTVBCQ2RJVEJhbUFpQVNhdkpYaTlwd3M4ckRESlN4aEdNbG1FN3pJNWJTQThpdnRSQzlMZ3ErVVhBU1FEbDNlb3FMSUQrRVRKTk0remJNdXZ3dmNIRUl4ZUJaa1o5ZnA1akp2Nk9DVFB3bGo0VEpTdXkxYXZFV3FVWVMycml2NUR2bDJoYUZVb0NIZjR5YXdBQT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVERUUxMERDMzZBQ0Q5OTVDOEUwRTg2RTNDRDJGQkY4MzAxQTRBQzJCODg0N0I2MUExOTM1REU0OTczQjQwN0MwRSIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTN1RU53MnJObVZ5T0RvYmp6UysvZ3dHa3JDdUlSN1lhR1RYZVNYTzBCOERuTWhBbVgwdmI3aitsZ0JqRmpiTjlSbEE4Nko3QU8yVm42SExxdU8zYWlzSzRtd2RrWXdSQUlnZnhCTG43aTRqZy9kaTBVMjVxNmtJYlZmVHpxYkEwU0NwUTBJNTdUT0ZrY0NJRk10SlFwRU5qQjJLMkVtdkJIUHZOY3d1U1BjM3ZzRWVxRTJyTkovY1Q1RGNCSkFmNjhYUEZ1NVJqQ2VMZ3BGSk03UEtGTGdvVjhlMW54TzVld2pxOVErVEFFR25GeVMwSU93ZjZwT090SVZNZFZlWHUxdjZwNGZoWFFrZGloSHQxeDZBZz09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDU4M0VDRDA2QzNCNzM2OTk4MEU2NUM3OEM0NDBBNTI5MzAwRjU1N0VEODEyNTYyODNGN0RENUFBMzUxM0EzMzQiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxWVBzMEd3N2MybVlEbVhIakVRS1VwTUE5VmZ0Z1NWaWcvZmRXcU5ST2pOSE1oQXl1VW56WloxbjIvR2FUbUUxbTdIL3Y5WWxaeURFd0hZM2dTSFVBM0lDTDlka1l3UkFJZ0h4MlBIdmlkb04rNXlHOVdlQVMyazdud0lNOGFqeFFXNndqdnQ4a0JlbkFDSUROeFFQUWtEeURKSDlzZVM1QzYybUFhclFtZ2lOODlZUzNqaE50bnZFSXFjQkpBajdKaDBLYWMrYUpkcG9lcHUvK2VKS25uRlE3WUJ5WkI4ZU1aK1NTMXpMaEUrbGlwLzQ5cXFWTmNwQXhFcWZhR3R4SnpvREREMS9RYnVVN05PU1BrQ2c9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ5NUM1MTcyQjJBRDdEMzk0MzRFRUJDNDM2QjY1QjNCQjdFNThENUMxQ0VGQzgyMEI2OTcyQUNBRDc3NkUyODZBIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMlZ4UmNyS3RmVGxEVHV2RU5yWmJPN2ZsalZ3Yzc4Z2d0cGNxeXRkMjRvYW5NaEFpcWNSZGUzTVFaMDc1ZmE0Wk5OeVJhWUpHTWRCTmtCbm4zYlFyS3NlQkRRZGtZd1JBSWdVK0xmY0U3MURQVnJPK0t0VUJqUTlEMnUway9QcjdsdWtPMW5QUmo2aFNBQ0lETkxZQy9KRmdvYkNzSWEwQkd3KzZiVW5PdzltZVUzRmRYZ1I3UTdTb3FKY0JKQVhRYWtPb1FuUHAzcGNMTDd6ZEtDUFVYNGIrL0ZDOVVuaHFwK085eFFGblJhQ1dWR21rNU1KT0lNczRXT1FkcE0xajNPZ1NzQUJtUnVDWFl2d28vbkR3PT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEOTFFQTFFMDg0NURDQTFGMkUxOTYzQkEwRDQ1RjMwQzk0M0RGMjhGM0JGQjBBMTAxNzQzNjUxMzdDN0Y2RTlDNCIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTJSNmg0SVJkeWg4dUdXTzZEVVh6REpROThvODcrd29RRjBObEUzeC9icHhITWhBeTB5OWRHUHNoM3p5Q096bnFWbExEUTM4dTRLMkcvNndndkpETVV1UWcrc2RrWXdSQUlnTkVaYzFMRGF4eUlVeHJKRFAwZXVCdE5qSVFuclpqUlBPdGxWZ0d5bWNEMENJQVhISWt1YjVEVmttb0tkT1BHWVBaUE5zN3FqQ1RWRy9OZ0w0SWhaQ2NkcGNCSkFxbkF0dnZRY3lhVWY5YVc2QXNFMnN6VzZobHFEaUo1U0JyaTlpMEJBbFVWR1FDRnVnUXBwMWtaSjhNclJlUjVsVTROMFdmdTNXOHdoQ0lKNHpZU3BDdz09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDMwNjA0REExMUVCQUI3M0M0QTI4MzBGMDE0RDZGODRCRDRCMUMyNjBCQjFBNEUyRjkwNjNDMUE3QjQzODRBOTYiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUwd1lFMmhIcnEzUEVvb01QQVUxdmhMMUxIQ1lMc2FUaStRWThHbnREaEtsbk1oQTdtQzB5OEpaVW1MVGhWTFdYazFHM3lvQmh2QzJEV3BrUFE3blNlWlpJYVZka2N3UlFJaEFPOGFUM3o3R0ZQTnlmSUN1VktPMGF4TWRtNjNpdHY5eDA0REVBOUxJQmU3QWlBNjFhRy9yaC83VjlTcmlOcXFUVm5KZzdqUS9ab1hTZlVaTnI0WEhjR3RJSEFTUU9YL0FJSlhFZWVPMHpJK3lzTmNwTUlkWDdpRnVzZStveDA5U3JmRnk4S3NZYjZlM1RBK1RWVVhOdS9PWktSditWWmx3Tzc5K2QvUkgwcHpXWkJxZWdNPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ4MjUyQzJGOTE1MjMxMjZFRUY5QTIxOTY0QzdFNDg3QTEwRDZENjNENDU5MTM5NzAwREJDNzBEOUY3QkFENTQyIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMkNVc0w1RlNNU2J1K2FJWlpNZmtoNkVOYldQVVdST1hBTnZIRFo5N3JWUW5NaEE0MUxvR0c0NGQ5VFpxVDBiYWtyOWRwRkNxTCtmZ1hDSU5tQVlDZVhmNGFjZGtZd1JBSWdkTWdjVmxWUElmZmIxSVRCYVdqU0orQXN5N1A5OEdPOVdEbWlCbTQyZXBzQ0lBRFNabXhsdU4vTlBuN253S1o2RzN4ZmVGOGxINWVjSXRQV05yV1dPdVc0Y0JKQXRzdHY4SVVVTW5UWmRVemptOFlRREFHcW9vV0NpazV0dGpZbWs0NnFxMlRzV1JUSUw3M0twOVZMSGJHckV2TmRrbjVZTEJtZHdmVHdoV21CcmlRdkF3PT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENjNDRjkyOUJFODVCMjY2QTY2NTg0QjNGRTJFQjk3RkMyNDgyMDNGMDI3MURDOUM4MzM1NjNFNjA0MThFNzgxOCIsIm1hbmlmZXN0IjoiSkFBQUFBTnhJZTFqejVLYjZGc21hbVpZU3ovaTY1ZjhKSUlEOENjZHljZ3pWajVnUVk1NEdITWhBNDZ5bmtpaUFBRVVHWmdNckNIVUQ2aDF6V0VieGlBOTFNMTZJNTR1eG5PL2RrWXdSQUlnRVVKaVoyeXFvdDFYclZVNk0vY2xhZVJBSzVUeDBCR1R0eWtvbjhKSUpDa0NJRjcwdmdRcGVYcFYwdjJlcVBUOERPcWNwMU4yQ3hnQmtEbi95bHNxT0JpbGNCSkFGUUp4NGpmWmFEMTFudzAyTDc0SVl6VnR5YVJOS1ZDcjRrZEhOb3lMZG1XTDl4V0NDVHdWaFVmOG5oMllmSXBKY0ZuRnAwamFTUFVRcjZHd2x0cTlBQT09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDBBRDA2MDlCQ0MwMjI2OTYyQkU2QTFGMUUzOTc2RDQ5ODRDRUFBRDNCOTI4QTAzRENBMjhFQjdCQjdBMTIzNzciLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUwSzBHQ2J6QUltbGl2bW9mSGpsMjFKaE02cTA3a29vRDNLS090N3Q2RWpkM01oQTEzRzRCYUxzUWMwWnVxTVdkbDJtSVZMU1ZPUktnOEVQVTMzOHdJRHRLcEpka1l3UkFJZ0VPNXNWTXhpaVowMkU1UFJQaFRPWFJwRFNKZFU0V2h3V1oxTGNBSWhETkVDSUNuaFV0cUR3dmxXRE4yRzFhOUN4QldzWER5ei90SGRwbCsrQ3BtUjRiT0ZjQkpBOGNLZ2EwNkJ5SG9BVGVqVnNWRVVGN0xLMVB5T1MwRFJYb0xyNVlzTlBiRitucSt1eGk3eUJNYkRRVSsyUGJDRVJ4WW5jcGVaUEQyVjJtNnhEOHVDQWc9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURDMDkwOTgwRUNBQUIzN0NCRTUyRTg4MDIzNkVDNTdGNzMyQjdEQkI3QzdCQjlBMzc2OEQzQTZFNzE4NEE3OTVFIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllM0FrSmdPeXFzM3krVXVpQUkyN0ZmM01yZmJ0OGU3bWpkbzA2Ym5HRXA1WG5NaEFoUm12Q1ptV1pYbHdTaFZFOXFYczJBVkN2aFZ1QS9XR1lrVFgvdlZHQkd3ZGtZd1JBSWdHbllwSUd1ZlVSb2pOMmNUWGFrQU03VndhMEdSN28zb3NkVmxaU2hyb1hRQ0lIOVIvTHgxdjlyZGI0WVkybjVucnhkbmhTU29mM1U2Vi93SUhKbWVhbzV1Y0JKQTlEMWlBTW83WUZDcGIyNDVOM0N6YzBMMVIyWGFjMFl3UTZYZEdUK2NaN3l3Mm44SmJkQzNoSDhYdTlPVXFjODY3RWU2Sm1sWHR5REh6QmRZL2hkSkNRPT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEQzE4OTdDRTgzQjZEQ0Y1ODg1ODU3NEVDOUZFMDI3RDRCMTUzOEEwRjIwODIzODAwQTU1MjlFMTIxRTg3QTkzQiIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTNCaVh6b08yM1BXSVdGZE95ZjRDZlVzVk9LRHlDQ09BQ2xVcDRTSG9lcE8zTWhBeXpnaE43RFBQYjZEUWsrQzhqRDZWeG5BdHZyTVAzd2I0ZFVXdmlrT3liNmRrY3dSUUloQU5tcHZuSm5OQUJtc1ZWVGdaR0c5L2dKMmdPMTArcmVJdmoxUm1DTjI3a3VBaUJxRzVUTWpIS2RTSERvMmtSWC95SWM2WmJ6TXhDZVFOZzBwL1ZRWUhCNzBIQVNRRUVXZVEzRUpLaWZyL3JGUVJHWVRBVEt0Sy9LbVN5UjI0NkRBWUdEa013bXFaOU1VaGpBYWxXUGRTa3MrcThFOGxteG5rRWxtSjlJUkw4MGVmc2xDQVE9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDVFODIyNzZCQ0MyNzg0OTlFNDI4NTM5OTc4OUY1QTkzMTk2MTY2QjU1Mjk1Nzk5N0E2MTU5OUQ0Rjg2MTM5NTkiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxZWdpZHJ6Q2VFbWVRb1U1bDRuMXFUR1dGbXRWS1ZlWmVtRlpuVStHRTVXWE1oQXcyT2pON0UzQWZXeDRzQU43ays4U2RIeXBWNlBLdi9MZG5DdDFPaUNmK1Jka1l3UkFJZ2Y1aElxbGhDc0RYVW1KcWRyVTZDYU0rdGwzNHlxUm83UXpPWUIySkV5bzhDSUZmTUJ2YTdqcy9QTTl5eUpvOTVqeEUrVlRwV0N4WGQ5bzdjN3FqeWl0dVRjQkpBK2JpQ1pjaGticmljb1FLTVNidFVGUmloMTBLaG9iNGx2YStTTXo2bGRBOGM1d1hXVW5PbHFaN1dXeUcxeStGYU03Q3pEQXg0aUVnM0tNUW00NG5VQ1E9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURGMTAwNzRGNUZCQkI5NzVBOEVBOEU5QzQyMzA2ODU0RTZBNDlDNzFCN0QzM0IwMjkzQUIxODMwRkVDRjJDNDAwIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllM3hBSFQxKzd1WFdvNm82Y1FqQm9WT2FrbkhHMzB6c0NrNnNZTVA3UExFQUhNaEEvNTBnVThlV0xxd1ZQS3prME5qNWJBYyt4SjFtRmV2elA0ZU43R0lGczUzZGtjd1JRSWhBTmVZaWdMMzNaMWlRNHlxKytDYWlTeTNBSEx3RTl5dVNKKzJ6ODRzOXlwSkFpQlpQZy9LS09YWnB1c1p3WGhySHZ3T3pXRFNlREowVy9WMWlFUW5NaHcrdkhBU1FMVzByNXIrbkcreCtGNWIzWThhQUpRaGtYMUNCT2hnRkZldUFtQ3ZVTzJmNnZsRXg0NTVoRHRKcUk4Tjg0YTBLZzVZK2dtenBzRVNORlhFSkJIMXh3RT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVERkU2NUZCMzg1QjZCQjE2OTUxMTUzRDJBMEYzMkJENkQ4Q0M0NTMyQzg3QkIzRTE5MDA5MTNBN0JFMzRGNUVGNyIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTMrWmZzNFcydXhhVkVWUFNvUE1yMXRqTVJUTEllN1Boa0FrVHA3NDA5ZTkzTWhBMzFnWERCNHdWRjA2WFBRTTNmU2N4ZldIa29SRTVrZ2dDL1NFd1hDWVNIRGRrY3dSUUloQU1TRXY3a2ExZDcwelRlM2N0d0JiOWQraHgrd1pqdmVaYmNWdXBoZnpSZy9BaUJPanllVE4wZnZiam11citsVi9vdkcxQTlaZmtuN0htTzduYnJGaW9yTHdYQVNRTEFITGdLcGxlSHlhU1F2ME80ZENJMHJTdXZQUjRTdnc5RmtNQ29yVlpLRzd5d0FtS04yaFJXOFVyYVVmcW0ySHBRQ3E0QUFTZ1JvUjIvWWhCUUNFZ289In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDU4RjY3NzBEQjVERDc3RTU5RDI4Q0I2NTBFQzM4MTZFMkZDOTUwMjFCQjU2RTcyMEM5QTEyREE3OUM1OEEzQUIiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxWTluY050ZDEzNVowb3kyVU93NEZ1TDhsUUlidFc1eURKb1Mybm5GaWpxM01oQStRWlZGRXZmSUg0SWxjbFBzVmZUY2FLZ1IzWE5yWE5rOTdHeHRLWUJSM2pka2N3UlFJaEFPZ25sbHNXVnZoV0hmdlZPc2RYR3NRanJSWnAyYnVXSVNlcTZHU1lpejdGQWlBY0NPOE9tSGl2Wmp3QWwrZE4xSi85RkorY0VseGNwci9NK0NhSGtVQnQ2SEFTUURUTyt5ZitoMW5hQlFnUW1ZMzJhalR2cFBMc3A0Z1FVeGFZbFRsMHZka2VYSHlBbnRFQ2V6Z294V0JsbzlJckV6QkZ6V09mWEZUeDRid1RyRU11QkFrPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ1Nzg0QTQzQUE4NEI1QkRBRkQwQUZFRjY0QURBNTU4M0EzMTI5MTgyQzZBNzQ2NDk1MEZENkJGMkQ5RkFFNUIwIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMVhoS1E2cUV0YjJ2MEsvdlpLMmxXRG94S1Jnc2FuUmtsUS9XdnkyZnJsc0hNaEFyZGJTRWwvT2hhNEk1VkkwcVZ4bWMxekJXb1JiNVludXRjaU9DMGwrT1lkZGtjd1JRSWhBSXFsdUlndHpHSlpKRzlzN3QyNTU4aXBuR2ZnWE9aeE9CTitWWGV5NGlTbUFpQVdKenphblhqWEltTUIvVnRISHJxczFWNHhubGc4dUYreTdNcysxdk1HWm5BU1FDWlluTlIzYVNsd2RZcFJrUDV2MVY5YTVCZXNKVVpENlVKMW5NcjViNVZvT21sK0RqVnREVVp5c3JDSXgwMGErZ0x6K3RoODZnVGV5N1VuQ3JxZ1Fnaz0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENzU5NDBFQzA5MTMwRjlDNTUzRDhBRjBGRTM1NEExMTJDQzI3MjUxNDcyQUYxQTkwOTE3NTk3NDg5MTkyMTM1RiIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTExbEE3QWtURDV4VlBZcncvalZLRVN6Q2NsRkhLdkdwQ1JkWmRJa1pJVFgzTWhBb3pIZi8vUnBHZ05FeFBOUDhTMkhETEg1TlFFcnFqUFNaeTk5S244RzMxbWRrY3dSUUloQUtKVzBEakkxeGVUWUJsREU5cVk5dDMyc3VMVjNoc1FvMFNXNGN2R20wRGNBaUE3QUtnN1NTSEFWbkpuRzdIa0pVNmp4VGo5cVBSZzYvbzZsQXh5V0ZSc2VuQVNRUFA1bkpCRlRsdXhaMUNKK01sSEFRWE9uNEhqUmVIa05mRDBKRjJFRmtLWFJjZC8xSHJuRTl1R1B0MzFFV1doUFUxK3M2dHNiSXg3d3k5bXE1WGNIUTA9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREY0Q0M1QUI3ODREQzU2OUQ5QkJENDY5ODJCMUNGODBBNzlCQjRDMEFEMUNBMTI3MEYxRDhCNUVBNEE1Qjk1MEIiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUzMHpGcTNoTnhXblp1OVJwZ3JIUGdLZWJ0TUN0SEtFbkR4MkxYcVNsdVZDM01oQW9IM2tjaU1jdXlZeGFWN3hveDBQRy9ES3V6RjFUN3UvUm1VdEdrQmYwVU5ka2N3UlFJaEFMblEwckJsR1MvUHJOTlZLamtoeUpuUXF6ZWxSenRnQTRrQzB4ZXdRaFhvQWlCWXZMZkZxMTRVTllWeThmZkdlYzBWUmNUbTdaWlIxcXgrakRvNENGUHl5SEFTUURXN0E5TnVseHliZS9JSzVRaFhCcDcxdUdpN0ZRMlJDd3cvV3ZLNGtWaWRteGxUaCtNakhJT2lkOFZ4Tm1BVG1EZnBnWE1pOFI4WkM2VFNWRUEzeWdJPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURDRkU2NTEyMUUzOUEyOTU1RjA0RDZENzg0RTNCMDIxNzkxRTg4RDEzOTNEQTRBRkFCODlGOTlBOTI5QTcyOTI0IiwibWFuaWZlc3QiOiJKQUFBQUFGeEllM1A1bEVoNDVvcFZmQk5iWGhPT3dJWGtlaU5FNVBhU3ZxNG41bXBLYWNwSkhNaEFsdHE0YzZOSmowaHZsNDdiU2hIQ05aQ2RhNWpLU2I1UThVS29IYWdKS1ZuZGtZd1JBSWdLTnNUYjU0QnRPTC9uS1R1THFGSjJSUVRMVjFRdVZKcEJDam1DZ2lXMGNzQ0lDLzQ5Yks2SjQyMFBGM2xMUlVMQWlKY3RZR0FJYXZxeExTc0hEa2krS3ZmY0JKQWtjT2FXd3VRMERweVYvempCZmNkakxZQzVZYk15ME5LR24rOEl5MWdMY1hVa1l0VTQwaFc3OHdjSnpZUFpQU2ZTUCtKQlZUVnNDWFJzOHdyZHFzV0F3PT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEQTVBQUUwREIxMzRCODA5RjhENjY0ODg4RjdFQzRGQ0U5OERDNEQwMEIzMzMwMTAzMjQyNDk0MUMxNkMyRjBGNyIsIm1hbmlmZXN0IjoiSkFBQUFBTnhJZTJscXVEYkUwdUFuNDFtU0lqMzdFL09tTnhOQUxNekFRTWtKSlFjRnNMdzkzTWhBZ2JFYXhnT2JyYmNxV2RWK2U3M0dQQVhJU2hxYnNxZktITTlZenZrZTNEVWRrY3dSUUloQU5jWmtPbDdIR1hPMXZwOVpidTBBZWNCZ3NmVGpWRU1uMEFEaUl4R3JzaXNBaUFzeXZiZU1haVVvYWZsRkRKUFZaUWpaMGVWM2VWR2x6alFIaGc5dkp2NE1YQVNRRCt6Y1BGWGQrN3VtankvRzZCTlJESEVVbUM1Q3EyeXBBWWJNeFRzekRCOTQ4ZGo5M09vTFNOWEJVQW92MmxuZER6dXlKQ1hYdFhBRjBROEZqLzZzUUk9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDc2MEU1OEExNEU1N0M5MUY3NEM2ODY0RTI3OUMwMDAwRjNFRDJEODY4QkE2ODEyMTk3REYxMzQ4RDNGN0E0RDciLCJtYW5pZmVzdCI6IkpBQUFBQUp4SWUxMkRsaWhUbGZKSDNUR2hrNG5uQUFBOCswdGhvdW1nU0dYM3hOSTAvZWsxM01oQXBYeFF5RlJpcCs5TmRFdDdxZWRXWmZMRjZ2T21Cb1lSL1hhcjIzMlJQM3Jka2N3UlFJaEFNQmh4cmF6dFdiN2VyTWlqQWFydW5TUmsvcEpxci9kMEN1bWcrT1l1VDMrQWlBVXhxdnVtRXJXTzBuK0tTWTZQQTZvOW41bkJrNXozM0UxQVFkQmxwZDdGWEFTUURLNG9vWEc0ZmhHeExCN2k5aDQzZG56VWlkMjkrM2tEL3ZUVWlyM1QwY2pDMitGTEx6Wmo4QTA4NWdDMUVCaWNmTGpkdXZqeGhDVjFScE0zZUpWR1FFPSJ9XX0=", + "manifest": "JAAAAAFxIe0md6v/0bM6xvvDBitx8eg5fBUF4cQsZNEa0bKP9z9HNHMh7V0AnEi5D4odY9X2sx+cY8B3OHNjJvMhARRPtTHmWnAhdkDFcg53dAQS1WDMQDLIs2wwwHpScrUnjp1iZwwTXVXXsaRxLztycioto3JgImGdukXubbrjeqCNU02f7Y/+6w0BcBJA3M0EOU+39hmB8vwfgernXZIDQ1+o0dnuXjX73oDLgsacwXzLBVOdBpSAsJwYD+nW8YaSacOHEsWaPlof05EsAg==", + "public_key" : "ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734", "signature" : "6D4F8D020DC79A7866DF39B536AD5E85E2D6458BA7D002B8EAB7D2F492063993580E73F5A252E88C92DE26923573DA5707BA6A5693FA6D6082371FE03F96D304", "version": 1 } diff --git a/content/_code-samples/airgapped-wallet/py/requirements.txt b/content/_code-samples/airgapped-wallet/py/requirements.txt index b9aecf161e..af6f76aa45 100644 --- a/content/_code-samples/airgapped-wallet/py/requirements.txt +++ b/content/_code-samples/airgapped-wallet/py/requirements.txt @@ -4,15 +4,15 @@ base58==2.1.0 certifi==2023.7.22 cffi==1.15.0 colorama==0.4.4 -cryptography==41.0.4 -Django==3.2.20 +cryptography==41.0.6 +Django==3.2.23 ECPy==1.2.5 h11==0.12.0 httpcore==0.13.6 idna==3.2 image==1.5.33 pifacedigitalio==3.0.5 -Pillow==9.3.0 +Pillow==10.0.1 pycparser==2.20 pytz==2021.1 qrcode==7.2 diff --git a/content/_code-samples/build-a-browser-wallet/js/yarn.lock b/content/_code-samples/build-a-browser-wallet/js/yarn.lock index a75299304d..52be3bfd6e 100644 --- a/content/_code-samples/build-a-browser-wallet/js/yarn.lock +++ b/content/_code-samples/build-a-browser-wallet/js/yarn.lock @@ -140,11 +140,23 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@types/brorand@^1.0.30": + version "1.0.31" + resolved "https://registry.yarnpkg.com/@types/brorand/-/brorand-1.0.31.tgz#120626ac4ce3510e6a8e20f3bd7ad7a2ec68cd35" + integrity sha512-L3fWmIDV7i8dBeE2/Yk/pDThcLYu0M6/FJpa1YxubI0Q69Po8v1HyyIslu39Q9oTf5nsC85MMbFtidWabnO1PQ== + dependencies: + "@types/node" "*" + "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== +"@types/node@*": + version "20.8.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.3.tgz#c4ae2bb1cfab2999ed441a95c122bbbe1567a66d" + integrity sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw== + "@types/node@10.12.18": version "10.12.18" resolved "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz" @@ -187,16 +199,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -base-x@3.0.9, base-x@^3.0.2: +base-x@^3.0.2, base-x@^3.0.9: version "3.0.9" resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" -base64-js@^1.0.2: +base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== big-integer@^1.6.48: @@ -244,7 +256,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9: resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -285,7 +297,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== @@ -294,19 +306,19 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" + integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" + bn.js "^5.2.1" + browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.3" + elliptic "^6.5.4" inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" + parse-asn1 "^5.1.6" + readable-stream "^3.6.2" + safe-buffer "^5.2.1" bs58@^4.0.0: version "4.0.1" @@ -329,13 +341,13 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@5.6.0: - version "5.6.0" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== +buffer@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" + base64-js "^1.3.1" + ieee754 "^1.2.1" builtin-status-codes@^3.0.0: version "3.0.0" @@ -615,9 +627,9 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -ieee754@^1.1.4: +ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.4: @@ -720,10 +732,10 @@ nan@^2.13.2: resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== object-is@^1.0.1: version "1.1.5" @@ -738,7 +750,7 @@ object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -parse-asn1@^5.0.0, parse-asn1@^5.1.5: +parse-asn1@^5.0.0, parse-asn1@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== @@ -776,11 +788,11 @@ picomatch@^2.3.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== postcss@^8.4.21: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -820,6 +832,15 @@ readable-stream@^3.5.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + resolve@^1.22.1: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" @@ -837,36 +858,36 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -ripple-address-codec@^4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.2.4.tgz" - integrity sha512-roAOjKz94+FboTItey1XRh5qynwt4xvfBLvbbcx+FiR94Yw2x3LrKLF2GVCMCSAh5I6PkcpADg6AbYsUbGN3nA== +ripple-address-codec@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz#68fbaf646bb8567f70743af7f1ce4479f73efbf6" + integrity sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ== dependencies: - base-x "3.0.9" + base-x "^3.0.9" create-hash "^1.1.2" -ripple-binary-codec@^1.5.0-beta.3: - version "1.5.0-beta.3" - resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.5.0-beta.3.tgz#8f1514cf449a938a6285c469030a7bb1c0889fa3" - integrity sha512-VqAmgcOCYzg02DI4ajzX3jwKZ/nQMgwUoyk2/jWtuJqfXfPdEafBAnj0yGqo/gJ28hXY7tQoVAPCFBfLs5wksQ== +ripple-binary-codec@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.10.0.tgz#549f7fb3d3faf6b2d09fe7032bdcc4e6f8b5a511" + integrity sha512-qWXxubgXBV3h5NTaaLiusZ1FhPqSy+bCYHHarfZ3bMmO2alRa1Ox61jvX1Zyozok8PcF3gs3bKwZci4RTlA07w== dependencies: assert "^2.0.0" big-integer "^1.6.48" - buffer "5.6.0" + buffer "6.0.3" create-hash "^1.2.0" decimal.js "^10.2.0" - ripple-address-codec "^4.2.4" + ripple-address-codec "^4.3.1" -ripple-keypairs@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.1.4.tgz" - integrity sha512-PMMjTOxZmCSBOvHPj6bA+V/HGx7oFgDtGGI8VcZYuaFO2H87UX0X0jhfHy+LA2Xy31WYlD7GaDIDDt2QO+AMtw== +ripple-keypairs@^1.1.5, ripple-keypairs@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz#7fa531df36b138134afb53555a87d7f5eb465b2e" + integrity sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ== dependencies: bn.js "^5.1.1" brorand "^1.0.5" elliptic "^6.5.4" hash.js "^1.0.3" - ripple-address-codec "^4.2.4" + ripple-address-codec "^4.3.1" rollup-plugin-polyfill-node@^0.12.0: version "0.12.0" @@ -882,7 +903,7 @@ rollup@^3.10.0: optionalDependencies: fsevents "~2.3.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -1003,20 +1024,30 @@ ws@^8.2.2: resolved "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz" integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== -xrpl@^2.7.0-beta.2: - version "2.7.0-beta.2" - resolved "https://registry.yarnpkg.com/xrpl/-/xrpl-2.7.0-beta.2.tgz#b0f56dd600d937aab98a25d6e04ee5ba9b7aae88" - integrity sha512-ZhTr3LzIEOus0GakmGonK/JsyPDtU75QlUBDzPoX52qLIrZIgBVaNw+5K19p+Xn//EeGQqvHN5UbTCg5Obd3bw== +xrpl-secret-numbers@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/xrpl-secret-numbers/-/xrpl-secret-numbers-0.3.4.tgz#947d6c803b8ff0286f19256e0fc54ea1bee96ae2" + integrity sha512-B3m0OLRsmNLQpN/BUR15+LC4yejM/pdneoWgijfBYbgjVVnpyCF5+Ur7zbAs4nCAlBUZYXnxp+o/rSNZkke9jQ== + dependencies: + "@types/brorand" "^1.0.30" + brorand "^1.1.0" + ripple-keypairs "^1.1.5" + +xrpl@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/xrpl/-/xrpl-2.12.0.tgz#6298ca0cbc28151a491a650552ef30166fc76c09" + integrity sha512-K50m1F2FDVwx5eUgHQcwl4xi7bA2eWxtSrmJ6CRomLsWjFSkortOLIzDfVLMtrylB2au1ky91zoeaDDrDxVYLQ== dependencies: bignumber.js "^9.0.0" bip32 "^2.0.6" bip39 "^3.0.4" https-proxy-agent "^5.0.0" lodash "^4.17.4" - ripple-address-codec "^4.2.4" - ripple-binary-codec "^1.5.0-beta.3" - ripple-keypairs "^1.1.4" + ripple-address-codec "^4.3.1" + ripple-binary-codec "^1.10.0" + ripple-keypairs "^1.3.1" ws "^8.2.2" + xrpl-secret-numbers "^0.3.3" xtend@^4.0.2: version "4.0.2" diff --git a/content/_code-samples/build-a-desktop-wallet/js/package.json b/content/_code-samples/build-a-desktop-wallet/js/package.json index eea91a1799..d1d3e9a7f5 100644 --- a/content/_code-samples/build-a-desktop-wallet/js/package.json +++ b/content/_code-samples/build-a-desktop-wallet/js/package.json @@ -23,6 +23,6 @@ "xrpl": "^2.6.0" }, "devDependencies": { - "electron": "22.3.24" + "electron": "22.3.25" } } diff --git a/content/_code-samples/quickstart/js/8.escrow.html b/content/_code-samples/quickstart/js/8.escrow.html new file mode 100644 index 0000000000..54300cd465 --- /dev/null +++ b/content/_code-samples/quickstart/js/8.escrow.html @@ -0,0 +1,301 @@ + + + Time-based Escrow Test Harness + + + + + + + + + + + + + +

Time-based Escrow Test Harness

+
+ Choose your ledger instance: +    + + +    + + +

+ +
+ +

+ + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Standby Account + + +
+
+ XRP Balance + + +
+
+ Amount + + +
+
+ Destination Account + + +
+
+ Escrow Finish (seconds) + + +
+
+ Escrow Cancel (seconds) + + +
+
+ Escrow Sequence Number + + +
+
+ + +
+ Public Key + + +
+
+ Private Key + + +
+
+ Seed + + +
+
+

+ +

+
+ + + + + + + +
+ +

+ +
+ +
+ +
+ +
+
+
+ + + + +
+ + + + + + +
+ +

+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Operational Account + + +
+
+ XRP Balance + + +
+
+ Amount + + +
+
+ Destination + + +
+
+ Escrow Sequence Number + + +
+
+ Transaction to Look Up + + +
+
+ + + + +
+ Public Key + + +
+
+ Private Key + + +
+
+ Seed + + +
+
+

+ +

+
+
+
+
+ + \ No newline at end of file diff --git a/content/_code-samples/quickstart/js/9.escrow-condition.html b/content/_code-samples/quickstart/js/9.escrow-condition.html new file mode 100644 index 0000000000..c73d10b4d0 --- /dev/null +++ b/content/_code-samples/quickstart/js/9.escrow-condition.html @@ -0,0 +1,306 @@ + + + Conditional Escrow Test Harness + + + + + + + + + + + + + + +

Conditional Escrow Test Harness

+
+ Choose your ledger instance: +    + + +    + + +

+ +
+ +

+ + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Standby Account + + +
+
+ XRP Balance + + +
+
+ Amount + + +
+
+ Destination Account + + +
+
+ Escrow Condition + + +
+
+ Escrow Cancel (seconds) + + +
+
+ Escrow Sequence Number + + +
+
+ + +
+ Public Key + + +
+
+ Private Key + + +
+
+ Seed + + +
+
+

+ +

+
+ + + + + + + +
+ +

+ +
+ +
+ +
+ +
+
+
+ + + + +
+ + + + + + + + + +
+ +

+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Operational Account + + +
+
+ XRP Balance + + +
+
+ Amount + + +
+
+ Fulfillment Code + + +
+
+ Escrow Sequence Number + + +
+
+ Transaction to Look Up + + +
+
+ + + + +
+ Public Key + + +
+
+ Private Key + + +
+
+ Seed + + +
+
+

+ +

+
+
+
+
+ + \ No newline at end of file diff --git a/content/_code-samples/quickstart/js/getConditionAndFulfillment.js b/content/_code-samples/quickstart/js/getConditionAndFulfillment.js new file mode 100644 index 0000000000..3032187d62 --- /dev/null +++ b/content/_code-samples/quickstart/js/getConditionAndFulfillment.js @@ -0,0 +1,17 @@ +function getConditionAndFulfillment() { + + const cc = require('five-bells-condition') + const crypto = require('crypto') + + const preimageData = crypto.randomBytes(32) + const fulfillment = new cc.PreimageSha256() + fulfillment.setPreimage(preimageData) + + const condition = fulfillment.getConditionBinary().toString('hex').toUpperCase() + console.log('Condition:', condition) + + // Keep secret until you want to finish the escrow + const fulfillment_hex = fulfillment.serializeBinary().toString('hex').toUpperCase() + console.log('Fulfillment:', fulfillment_hex) +} +getConditionAndFulfillment() \ No newline at end of file diff --git a/content/_code-samples/quickstart/js/ripplex8-escrow.js b/content/_code-samples/quickstart/js/ripplex8-escrow.js new file mode 100644 index 0000000000..0066b6c5d9 --- /dev/null +++ b/content/_code-samples/quickstart/js/ripplex8-escrow.js @@ -0,0 +1,240 @@ +// ******************************************************* +// ************* Add Seconds to Current Date ************* +// ******************************************************* + +function addSeconds(numOfSeconds, date = new Date()) { + date.setSeconds(date.getSeconds() + numOfSeconds); + date = Math.floor(date / 1000) + date = date - 946684800 + + return date; +} + +// ******************************************************* +// ***************** Create Time Escrow ****************** +// ******************************************************* + +async function createTimeEscrow() { + + //-------------------------------------------- Prepare Finish and Cancel Dates + + let escrow_finish_date = new Date() + let escrow_cancel_date = new Date() + escrow_finish_date = addSeconds(parseInt(standbyEscrowFinishDateField.value)) + escrow_cancel_date = addSeconds(parseInt(standbyEscrowCancelDateField.value)) + + //------------------------------------------------------Connect to the Ledger + results = "Connecting to the selected ledger.\n" + standbyResultField.value = results + let net = getNet() + results = "Connecting to " + net + "....\n" + const client = new xrpl.Client(net) + await client.connect() + + results += "Connected. Creating time-based escrow.\n" + standbyResultField.value = results + + const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) + const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) + const sendAmount = standbyAmountField.value + + results += "\nstandby_wallet.address: = " + standby_wallet.address + standbyResultField.value = results + + // ------------------------------------------------------- Prepare transaction + + const escrowTx = await client.autofill({ + "TransactionType": "EscrowCreate", + "Account": standby_wallet.address, + "Amount": xrpl.xrpToDrops(sendAmount), + "Destination": standbyDestinationField.value, + "FinishAfter": escrow_finish_date, + "CancelAfter": escrow_cancel_date + }) + + // ------------------------------------------------ Sign prepared instructions + const signed = standby_wallet.sign(escrowTx) + + // -------------------------------------------------------- Submit signed blob + const tx = await client.submitAndWait(signed.tx_blob) + results += "\nSequence Number (Save!): " + JSON.stringify(tx.result.Sequence) + results += "\n\nBalance changes: " + + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) + standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address)) + operationalBalanceField.value = (await client.getXrpBalance(operational_wallet.address)) + standbyResultField.value = results + + // ----------------------------------------------Disconnect from the XRP Ledger + client.disconnect() + +} // End of createTimeEscrow() + +// ******************************************************* +// ***************** Finish Time Escrow ****************** +// ******************************************************* + +async function finishEscrow() { + + results = "Connecting to the selected ledger.\n" + operationalResultField.value = results + let net = getNet() + results = 'Connecting to ' + getNet() + '....' + const client = new xrpl.Client(net) + await client.connect() + + results += "\nConnected. Finishing escrow.\n" + operationalResultField.value = results + + const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) + const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) + const sendAmount = operationalAmountField.value + + results += "\noperational_wallet.address: = " + operational_wallet.address + operationalResultField.value = results + + // ------------------------------------------------------- Prepare transaction + // Note that the destination is hard coded. + const prepared = await client.autofill({ + "TransactionType": "EscrowFinish", + "Account": operationalAccountField.value, + "Owner": standbyAccountField.value, + "OfferSequence": parseInt(operationalEscrowSequenceField.value) + }) + + // ------------------------------------------------ Sign prepared instructions + const signed = operational_wallet.sign(prepared) + + // -------------------------------------------------------- Submit signed blob + const tx = await client.submitAndWait(signed.tx_blob) + results += "\nBalance changes: " + + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) + operationalResultField.value = results + standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address)) + operationalBalanceField.value = (await client.getXrpBalance(operational_wallet.address)) + + client.disconnect() +} // End of finishEscrow() + +// ******************************************************* +// ************** Get Standby Escrows ******************** +// ******************************************************* + +async function getStandbyEscrows() { + let net = getNet() + const client = new xrpl.Client(net) + results = 'Connecting to ' + getNet() + '....' + standbyResultField.value = results + + await client.connect() + results += '\nConnected.' + standbyResultField.value = results + + results= "\nGetting standby account escrows...\n" + const escrow_objects = await client.request({ + "id": 5, + "command": "account_objects", + "account": standbyAccountField.value, + "ledger_index": "validated", + "type": "escrow" + }) + results += JSON.stringify(escrow_objects.result, null, 2) + standbyResultField.value = results + + client.disconnect() +} // End of getStandbyEscrows() + +// ******************************************************* +// ***************** Get Op Escrows ********************** +// ******************************************************* + +async function getOperationalEscrows() { + let net = getNet() + const client = new xrpl.Client(net) + results = 'Connecting to ' + getNet() + '....' + operationalResultField.value = results + + await client.connect() + results += '\nConnected.' + operationalResultField.value = results + + results= "\nGetting operational account escrows...\n" + const escrow_objects = await client.request({ + "id": 5, + "command": "account_objects", + "account": operationalAccountField.value, + "ledger_index": "validated", + "type": "escrow" + }) + results += JSON.stringify(escrow_objects.result, null, 2) + operationalResultField.value = results + client.disconnect() + +} // End of getOperationalEscrows() + +// ******************************************************* +// ************** Get Transaction Info ******************* +// ******************************************************* + +async function getTransaction() { + let net = getNet() + const client = new xrpl.Client(net) + results = 'Connecting to ' + getNet() + '....' + operationalResultField.value = results + + await client.connect() + results += '\nConnected.' + operationalResultField.value = results + + results= "\nGetting transaction information...\n" + const tx_info = await client.request({ + "id": 1, + "command": "tx", + "transaction": operationalTransactionField.value, + }) + results += JSON.stringify(tx_info.result, null, 2) + operationalResultField.value = results + client.disconnect() + +} // End of getTransaction() + +// ******************************************************* +// ****************** Cancel Escrow ********************** +// ******************************************************* + +async function cancelEscrow() { + let net = getNet() + const client = new xrpl.Client(net) + results = 'Connecting to ' + getNet() + '....' + standbyResultField.value = results + + await client.connect() + results += '\nConnected.' + standbyResultField.value = results + + const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) + const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) + + // ------------------------------------------------------- Prepare transaction + + const prepared = await client.autofill({ + "TransactionType": "EscrowCancel", + "Account": standby_wallet.address, + "Owner": standbyAccountField.value, + "OfferSequence": parseInt(standbyEscrowSequenceNumberField.value) + }) + + // ------------------------------------------------ Sign prepared instructions + const signed = standby_wallet.sign(prepared) + + // -------------------------------------------------------- Submit signed blob + const tx = await client.submitAndWait(signed.tx_blob) + + results += "\nBalance changes: " + + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) + standbyResultField.value = results + + standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address)) + operationalBalanceField.value = (await client.getXrpBalance(operational_wallet.address)) + + client.disconnect() +} \ No newline at end of file diff --git a/content/_code-samples/quickstart/js/ripplex9-escrow-condition.js b/content/_code-samples/quickstart/js/ripplex9-escrow-condition.js new file mode 100644 index 0000000000..8b12dbb905 --- /dev/null +++ b/content/_code-samples/quickstart/js/ripplex9-escrow-condition.js @@ -0,0 +1,101 @@ +// ******************************************************* +// ************* Create Conditional Escrow *************** +// ******************************************************* + +async function createConditionalEscrow() { + + //------------------------------------------------------Connect to the Ledger + results = "Connecting to the selected ledger.\n" + standbyResultField.value = results + let net = getNet() + results = "Connecting to " + net + "....\n" + const client = new xrpl.Client(net) + await client.connect() + + results += "Connected. Creating conditional escrow.\n" + standbyResultField.value = results + + const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) + const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) + const sendAmount = standbyAmountField.value + + results += "\nstandby_wallet.address: = " + standby_wallet.address + standbyResultField.value = results + + let escrow_cancel_date = new Date() + escrow_cancel_date = addSeconds(parseInt(standbyEscrowCancelDateField.value)) + + // ------------------------------------------------------- Prepare transaction + + const escrowTx = await client.autofill({ + "TransactionType": "EscrowCreate", + "Account": standby_wallet.address, + "Amount": xrpl.xrpToDrops(sendAmount), + "Destination": standbyDestinationField.value, + "CancelAfter": escrow_cancel_date, + "Condition": standbyEscrowConditionField.value + }) + + // ------------------------------------------------ Sign prepared instructions + const signed = standby_wallet.sign(escrowTx) + + // -------------------------------------------------------- Submit signed blob + const tx = await client.submitAndWait(signed.tx_blob) + results += "\nSequence Number (Save!): " + JSON.stringify(tx.result.Sequence) + results += "\n\nBalance changes: " + + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) + standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address)) + operationalBalanceField.value = (await client.getXrpBalance(operational_wallet.address)) + standbyResultField.value = results + + // ----------------------------------------------Disconnect from the XRP Ledger + client.disconnect() + +} // End of createTimeEscrow() + +// ******************************************************* +// ************** Finish Conditional Escrow ************** +// ******************************************************* + +async function finishConditionalEscrow() { + results = "Connecting to the selected ledger.\n" + operationalResultField.value = results + let net = getNet() + results += 'Connecting to ' + getNet() + '....' + const client = new xrpl.Client(net) + await client.connect() + results += "\nConnected. Finishing escrow.\n" + operationalResultField.value = results + + const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) + const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) + const sendAmount = operationalAmountField.value + + results += "\noperational_wallet.address: = " + operational_wallet.address + operationalResultField.value = results + + // ------------------------------------------------------- Prepare transaction + + const prepared = await client.autofill({ + "TransactionType": "EscrowFinish", + "Account": operationalAccountField.value, + "Owner": standbyAccountField.value, + "OfferSequence": parseInt(operationalEscrowSequenceField.value), + "Condition": standbyEscrowConditionField.value, + "Fulfillment": operationalFulfillmentField.value + }) + + // ------------------------------------------------ Sign prepared instructions + const signed = operational_wallet.sign(prepared) + + // -------------------------------------------------------- Submit signed blob + const tx = await client.submitAndWait(signed.tx_blob) + results += "\nBalance changes: " + + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) + operationalResultField.value = results + standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address)) + operationalBalanceField.value = (await client.getXrpBalance(operational_wallet.address)) + + client.disconnect() + +} // End of finishEscrow()`` \ No newline at end of file diff --git a/content/_code-samples/quickstart/py/lesson7-batch-minting.py b/content/_code-samples/quickstart/py/lesson7-batch-minting.py new file mode 100644 index 0000000000..f9d2d154fa --- /dev/null +++ b/content/_code-samples/quickstart/py/lesson7-batch-minting.py @@ -0,0 +1,127 @@ +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info +from mod7 import batch_mint, get_batch + +############################################# +## Handlers ################################# +############################################# + +# Module 7 Handlers + +def standby_batch_mint(): + results = batch_mint( + ent_standby_seed.get(), + ent_standby_uri.get(), + ent_standby_flags.get(), + ent_standby_transfer_fee.get(), + ent_standby_taxon.get(), + ent_standby_nft_count.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_get_batch_nfts(): + results = get_batch( + ent_standby_seed.get(), + ent_standby_account.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +# Module 1 Handlers +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +# Create a new window with the title "Quickstart - Batch Minting" +window = tk.Tk() +window.title("Quickstart - Batch Minting") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) +lbl_standby_uri = tk.Label(master=frm_form, text="NFT URI") +ent_standby_uri = tk.Entry(master=frm_form, width=50) +lbl_standby_flags = tk.Label(master=frm_form, text="Flags") +ent_standby_flags = tk.Entry(master=frm_form, width=50) +lbl_standby_transfer_fee = tk.Label(master=frm_form, text="Transfer Fee") +ent_standby_transfer_fee = tk.Entry(master=frm_form, width="50") +lbl_standby_taxon = tk.Label(master=frm_form, text="Taxon") +ent_standby_taxon = tk.Entry(master=frm_form, width="50") +lbl_standby_nft_id = tk.Label(master=frm_form, text="NFT ID") +ent_standby_nft_id = tk.Entry(master=frm_form, width="50") +lbl_standby_nft_offer_index = tk.Label(master=frm_form, text="NFT Offer Index") +ent_standby_nft_offer_index = tk.Entry(master=frm_form, width="50") +lbl_standby_nft_count = tk.Label(master=frm_form, text="NFT Count") +ent_standby_nft_count = tk.Entry(master=frm_form, width="50") +lbl_standby_results = tk.Label(master=frm_form,text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + + + +# Place field in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="w") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +lbl_standby_uri.grid(row=8, column=0, sticky="e") +ent_standby_uri.grid(row=8, column=1, sticky="w") +lbl_standby_flags.grid(row=9, column=0, sticky="e") +ent_standby_flags.grid(row=9, column=1, sticky="w") +lbl_standby_transfer_fee.grid(row=10, column=0, sticky="e") +ent_standby_transfer_fee.grid(row=10, column=1, sticky="w") +lbl_standby_taxon.grid(row=11, column=0, sticky="e") +ent_standby_taxon.grid(row=11, column=1, sticky="w") +lbl_standby_nft_count.grid(row=12, column=0, sticky="e") +ent_standby_nft_count.grid(row=12, column=1, sticky="w") +lbl_standby_results.grid(row=13, column=1, sticky="ne") +text_standby_results.grid(row=13, column=2, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row=0, column=2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row=1, column=2, sticky = "nsew") +btn_standby_batch_mint = tk.Button(master=frm_form, + text="Batch Mint", + command = standby_batch_mint) +btn_standby_batch_mint.grid(row=5, column=2, sticky = "nsew") +btn_standby_get_batch_nfts = tk.Button(master=frm_form, + text="Get Batch NFTs", + command = standby_get_batch_nfts) +btn_standby_get_batch_nfts.grid(row=8, column=2, sticky = "nsew") + +# Start the application +window.mainloop() diff --git a/content/_code-samples/quickstart/py/lesson8-time-escrow.py b/content/_code-samples/quickstart/py/lesson8-time-escrow.py new file mode 100644 index 0000000000..0b25b539f0 --- /dev/null +++ b/content/_code-samples/quickstart/py/lesson8-time-escrow.py @@ -0,0 +1,251 @@ +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info, send_xrp +from mod8 import create_time_escrow, finish_time_escrow, get_escrows, cancel_time_escrow, get_transaction + + +############################################# +## Handlers ################################# +############################################# + +## Mod 8 Handlers + +def standby_create_time_escrow(): + results = create_time_escrow( + ent_standby_seed.get(), + ent_standby_amount.get(), + ent_standby_destination.get(), + ent_standby_escrow_finish.get(), + ent_standby_escrow_cancel.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_finish_time_escrow(): + results = finish_time_escrow( + ent_operational_seed.get(), + ent_operational_escrow_owner.get(), + ent_operational_sequence_number.get() + ) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_escrows(): + results = get_escrows(ent_operational_account.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_cancel_time_escrow(): + results = cancel_time_escrow( + ent_standby_seed.get(), + ent_standby_escrow_owner.get(), + ent_standby_escrow_sequence_number.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_transaction(): + results = get_transaction(ent_operational_account.get(), + ent_operational_look_up.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 1 Handlers + +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def standby_send_xrp(): + response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(), + ent_standby_destination.get()) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(response.result, indent=4)) + get_standby_account_info() + get_operational_account_info() + + +def get_operational_account(): + new_wallet = get_account(ent_operational_seed.get()) + ent_operational_account.delete(0, tk.END) + ent_operational_account.insert(0, new_wallet.classic_address) + ent_operational_seed.delete(0, tk.END) + ent_operational_seed.insert(0, new_wallet.seed) + + +def get_operational_account_info(): + accountInfo = get_account_info(ent_operational_account.get()) + ent_operational_balance.delete(0, tk.END) + ent_operational_balance.insert(0,accountInfo['Balance']) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def operational_send_xrp(): + response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), + ent_operational_destination.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(response.result,indent=4)) + get_standby_account_info() + get_operational_account_info() + + +# Create a new window with the title "Time-based Escrow Example" +window = tk.Tk() +window.title("Time-based Escrow Example") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standy_amount = tk.Label(master=frm_form, text="Amount") +ent_standby_amount = tk.Entry(master=frm_form, width=50) +lbl_standby_destination = tk.Label(master=frm_form, text="Destination") +ent_standby_destination = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) + +lbl_standby_escrow_finish = tk.Label(master=frm_form, text="Escrow Finish (seconds)") +ent_standby_escrow_finish = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_cancel = tk.Label(master=frm_form, text="Escrow Cancel (seconds)") +ent_standby_escrow_cancel = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_standby_escrow_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_owner = tk.Label(master=frm_form, text="Escrow Owner") +ent_standby_escrow_owner = tk.Entry(master=frm_form, width=50) +lbl_standby_results = tk.Label(master=frm_form, text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + +# Place fields in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="e") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standy_amount.grid(row=3, column=0, sticky="e") +ent_standby_amount.grid(row=3, column=1) +lbl_standby_destination.grid(row=4, column=0, sticky="e") +ent_standby_destination.grid(row=4, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +lbl_standby_escrow_finish.grid(row=6, column=0, sticky="e") +ent_standby_escrow_finish.grid(row=6, column=1) +lbl_standby_escrow_cancel.grid(row=7, column=0, sticky="e") +ent_standby_escrow_cancel.grid(row=7, column=1) +lbl_standby_escrow_sequence_number.grid(row=8, column=0, sticky="e") +ent_standby_escrow_sequence_number.grid(row=8, column=1) +lbl_standby_escrow_owner.grid(row=9, column=0, sticky="e") +ent_standby_escrow_owner.grid(row=9, column=1) +lbl_standby_results.grid(row=10, column=0, sticky="ne") +text_standby_results.grid(row=10, column=1, sticky="nw") + +############################################### +## Operational Account ######################## +############################################### + +# Create the Label and Entry widgets for "Operational Account" +lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed") +ent_operational_seed = tk.Entry(master=frm_form, width=50) +lbl_operational_account = tk.Label(master=frm_form, text="Operational Account") +ent_operational_account = tk.Entry(master=frm_form, width=50) +lbl_operational_amount = tk.Label(master=frm_form, text="Amount") +ent_operational_amount = tk.Entry(master=frm_form, width=50) +lbl_operational_destination = tk.Label(master=frm_form, text="Destination") +ent_operational_destination = tk.Entry(master=frm_form, width=50) +lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_operational_balance = tk.Entry(master=frm_form, width=50) +lbl_operational_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_operational_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_owner=tk.Label(master=frm_form, text="Escrow Owner") +ent_operational_escrow_owner=tk.Entry(master=frm_form, width=50) +lbl_operational_look_up = tk.Label(master=frm_form, text="Transaction to Look Up") +ent_operational_look_up = tk.Entry(master=frm_form, width=50) +lbl_operational_results = tk.Label(master=frm_form,text='Results') +text_operational_results = tk.Text(master=frm_form, height = 20, width = 65) + + +#Place the widgets in a grid +lbl_operational_seed.grid(row=0, column=4, sticky="e") +ent_operational_seed.grid(row=0, column=5, sticky="w") +lbl_operational_account.grid(row=2,column=4, sticky="e") +ent_operational_account.grid(row=2,column=5, sticky="w") +lbl_operational_amount.grid(row=3, column=4, sticky="e") +ent_operational_amount.grid(row=3, column=5, sticky="w") +lbl_operational_destination.grid(row=4, column=4, sticky="e") +ent_operational_destination.grid(row=4, column=5, sticky="w") +lbl_operational_balance.grid(row=5, column=4, sticky="e") +ent_operational_balance.grid(row=5, column=5, sticky="w") +lbl_operational_sequence_number.grid(row=6, column=4, sticky="e") +ent_operational_sequence_number.grid(row=6, column=5, sticky="w") +lbl_operational_escrow_owner.grid(row=7, column=4, sticky="e") +ent_operational_escrow_owner.grid(row=7, column=5, sticky="w") +lbl_operational_look_up.grid(row=8, column=4, sticky="e") +ent_operational_look_up.grid(row=8, column=5, sticky="w") +lbl_operational_results.grid(row=10, column=4, sticky="ne") +text_operational_results.grid(row=10, column=5, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Get Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row = 0, column = 2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row = 1, column = 2, sticky = "nsew") +btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >", + command = standby_send_xrp) +btn_standby_send_xrp.grid(row = 2, column = 2, sticky = "nsew") + +btn_standby_create_escrow = tk.Button(master=frm_form, text="Create Time-based Escrow", + command = standby_create_time_escrow) +btn_standby_create_escrow.grid(row = 4, column = 2, sticky="nsew") +btn_standby_cancel_escrow = tk.Button(master=frm_form, text="Cancel Time-based Escrow", + command = standby_cancel_time_escrow) +btn_standby_cancel_escrow.grid(row=5,column = 2, sticky="nsew") + +# Create the Operational Account Buttons +btn_get_operational_account = tk.Button(master=frm_form, + text="Get Operational Account", + command = get_operational_account) +btn_get_operational_account.grid(row=0, column=3, sticky = "nsew") +btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info", + command = get_operational_account_info) +btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew") +btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP", + command = operational_send_xrp) +btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Finish Escrow", + command = operational_finish_time_escrow) +btn_op_finish_escrow.grid(row = 4, column = 3, sticky="nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Get Escrows", + command = operational_get_escrows) +btn_op_finish_escrow.grid(row = 5, column = 3, sticky="nsew") +btn_op_get_transaction = tk.Button(master=frm_form, text="Get Transaction", + command = operational_get_transaction) +btn_op_get_transaction.grid(row = 6, column = 3, sticky = "nsew") + + +# Start the application +window.mainloop() diff --git a/content/_code-samples/quickstart/py/lesson9-conditional-escrow.py b/content/_code-samples/quickstart/py/lesson9-conditional-escrow.py new file mode 100644 index 0000000000..33f8c3e3d1 --- /dev/null +++ b/content/_code-samples/quickstart/py/lesson9-conditional-escrow.py @@ -0,0 +1,263 @@ +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info, send_xrp +from mod8 import get_escrows, cancel_time_escrow, get_transaction +from mod9 import create_conditional_escrow, finish_conditional_escrow + + +############################################# +## Handlers ################################# +############################################# + +## Mod 9 Handlers + + +def standby_create_conditional_escrow(): + results = create_conditional_escrow( + ent_standby_seed.get(), + ent_standby_amount.get(), + ent_standby_destination.get(), + ent_standby_escrow_cancel.get(), + ent_standby_escrow_condition.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_finish_conditional_escrow(): + results = finish_conditional_escrow( + ent_operational_seed.get(), + ent_operational_escrow_owner.get(), + ent_operational_sequence_number.get(), + ent_standby_escrow_condition.get(), + ent_operational_escrow_fulfillment.get() + ) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + + + +## Mod 8 Handlers + +def operational_get_escrows(): + results = get_escrows(ent_operational_account.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_cancel_time_escrow(): + results = cancel_time_escrow( + ent_standby_seed.get(), + ent_standby_escrow_owner.get(), + ent_standby_escrow_sequence_number.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_transaction(): + results = get_transaction(ent_operational_account.get(), + ent_operational_look_up.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 1 Handlers + +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def standby_send_xrp(): + response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(), + ent_standby_destination.get()) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(response.result, indent=4)) + get_standby_account_info() + get_operational_account_info() + + +def get_operational_account(): + new_wallet = get_account(ent_operational_seed.get()) + ent_operational_account.delete(0, tk.END) + ent_operational_account.insert(0, new_wallet.classic_address) + ent_operational_seed.delete(0, tk.END) + ent_operational_seed.insert(0, new_wallet.seed) + + +def get_operational_account_info(): + accountInfo = get_account_info(ent_operational_account.get()) + ent_operational_balance.delete(0, tk.END) + ent_operational_balance.insert(0,accountInfo['Balance']) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def operational_send_xrp(): + response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), + ent_operational_destination.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(response.result,indent=4)) + get_standby_account_info() + get_operational_account_info() + + +# Create a new window with the title "Conditional Escrow Example" +window = tk.Tk() +window.title("Conditional Escrow Example") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standy_amount = tk.Label(master=frm_form, text="Amount") +ent_standby_amount = tk.Entry(master=frm_form, width=50) +lbl_standby_destination = tk.Label(master=frm_form, text="Destination") +ent_standby_destination = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) + +lbl_standby_escrow_condition = tk.Label(master=frm_form, text="Escrow Condition") +ent_standby_escrow_condition = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_cancel = tk.Label(master=frm_form, text="Escrow Cancel (seconds)") +ent_standby_escrow_cancel = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_standby_escrow_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_owner = tk.Label(master=frm_form, text="Escrow Owner") +ent_standby_escrow_owner = tk.Entry(master=frm_form, width=50) +lbl_standby_results = tk.Label(master=frm_form, text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + +# Place fields in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="e") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standy_amount.grid(row=3, column=0, sticky="e") +ent_standby_amount.grid(row=3, column=1) +lbl_standby_destination.grid(row=4, column=0, sticky="e") +ent_standby_destination.grid(row=4, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +lbl_standby_escrow_condition.grid(row=6, column=0, sticky="e") +ent_standby_escrow_condition.grid(row=6, column=1) +lbl_standby_escrow_cancel.grid(row=7, column=0, sticky="e") +ent_standby_escrow_cancel.grid(row=7, column=1) +lbl_standby_escrow_sequence_number.grid(row=8, column=0, sticky="e") +ent_standby_escrow_sequence_number.grid(row=8, column=1) +lbl_standby_escrow_owner.grid(row=9, column=0, sticky="e") +ent_standby_escrow_owner.grid(row=9, column=1) +lbl_standby_results.grid(row=10, column=0, sticky="ne") +text_standby_results.grid(row=10, column=1, sticky="nw") + +############################################### +## Operational Account ######################## +############################################### + +# Create the Label and Entry widgets for "Operational Account" +lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed") +ent_operational_seed = tk.Entry(master=frm_form, width=50) +lbl_operational_account = tk.Label(master=frm_form, text="Operational Account") +ent_operational_account = tk.Entry(master=frm_form, width=50) +lbl_operational_amount = tk.Label(master=frm_form, text="Amount") +ent_operational_amount = tk.Entry(master=frm_form, width=50) +lbl_operational_destination = tk.Label(master=frm_form, text="Destination") +ent_operational_destination = tk.Entry(master=frm_form, width=50) +lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_operational_balance = tk.Entry(master=frm_form, width=50) +lbl_operational_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_operational_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_owner=tk.Label(master=frm_form, text="Escrow Owner") +ent_operational_escrow_owner=tk.Entry(master=frm_form, width=50) +lbl_operational_look_up = tk.Label(master=frm_form, text="Transaction to Look Up") +ent_operational_look_up = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_fulfillment = tk.Label(master=frm_form, text="Escrow Fulfillment") +ent_operational_escrow_fulfillment = tk.Entry(master=frm_form, width=50) +lbl_operational_results = tk.Label(master=frm_form,text='Results') +text_operational_results = tk.Text(master=frm_form, height = 20, width = 65) + + +#Place the widgets in a grid +lbl_operational_seed.grid(row=0, column=4, sticky="e") +ent_operational_seed.grid(row=0, column=5, sticky="w") +lbl_operational_account.grid(row=2,column=4, sticky="e") +ent_operational_account.grid(row=2,column=5, sticky="w") +lbl_operational_amount.grid(row=3, column=4, sticky="e") +ent_operational_amount.grid(row=3, column=5, sticky="w") +lbl_operational_destination.grid(row=4, column=4, sticky="e") +ent_operational_destination.grid(row=4, column=5, sticky="w") +lbl_operational_balance.grid(row=5, column=4, sticky="e") +ent_operational_balance.grid(row=5, column=5, sticky="w") +lbl_operational_escrow_fulfillment.grid(row=6, column=4, sticky="e") +ent_operational_escrow_fulfillment.grid(row=6, column=5, sticky="w") +lbl_operational_sequence_number.grid(row=7, column=4, sticky="e") +ent_operational_sequence_number.grid(row=7, column=5, sticky="w") +lbl_operational_escrow_owner.grid(row=8, column=4, sticky="e") +ent_operational_escrow_owner.grid(row=8, column=5, sticky="w") +lbl_operational_look_up.grid(row=9, column=4, sticky="e") +ent_operational_look_up.grid(row=9, column=5, sticky="w") +lbl_operational_results.grid(row=10, column=4, sticky="ne") +text_operational_results.grid(row=10, column=5, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Get Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row = 0, column = 2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row = 1, column = 2, sticky = "nsew") +btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >", + command = standby_send_xrp) +btn_standby_send_xrp.grid(row = 2, column = 2, sticky = "nsew") + +btn_standby_create_escrow = tk.Button(master=frm_form, text="Create Conditional Escrow", + command = standby_create_conditional_escrow) +btn_standby_create_escrow.grid(row = 4, column = 2, sticky="nsew") +btn_standby_cancel_escrow = tk.Button(master=frm_form, text="Cancel Escrow", + command = standby_cancel_time_escrow) +btn_standby_cancel_escrow.grid(row=5,column = 2, sticky="nsew") + +# Create the Operational Account Buttons +btn_get_operational_account = tk.Button(master=frm_form, + text="Get Operational Account", + command = get_operational_account) +btn_get_operational_account.grid(row=0, column=3, sticky = "nsew") +btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info", + command = get_operational_account_info) +btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew") +btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP", + command = operational_send_xrp) +btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Finish Escrow", + command = operational_finish_conditional_escrow) +btn_op_finish_escrow.grid(row = 4, column = 3, sticky="nsew") +btn_op_get_escrows = tk.Button(master=frm_form, text="Get Escrows", + command = operational_get_escrows) +btn_op_get_escrows.grid(row = 5, column = 3, sticky="nsew") +btn_op_get_transaction = tk.Button(master=frm_form, text="Get Transaction", + command = operational_get_transaction) +btn_op_get_transaction.grid(row = 6, column = 3, sticky = "nsew") + + +# Start the application +window.mainloop() diff --git a/content/_code-samples/quickstart/py/mod8.py b/content/_code-samples/quickstart/py/mod8.py new file mode 100644 index 0000000000..53e352926f --- /dev/null +++ b/content/_code-samples/quickstart/py/mod8.py @@ -0,0 +1,92 @@ +import xrpl +from xrpl.clients import JsonRpcClient +from xrpl.wallet import Wallet +from datetime import datetime +from xrpl.models.transactions import EscrowCreate, EscrowFinish +from xrpl.models.requests import AccountObjects, AccountTx + +testnet_url = "https://s.altnet.rippletest.net:51234" + + +def add_seconds(numOfSeconds): + new_date = datetime.now() + if new_date != '': + new_date = xrpl.utils.datetime_to_ripple_time(new_date) + new_date = new_date + int(numOfSeconds) + return new_date + + +def create_time_escrow(seed, amount, destination, finish, cancel): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + finish_date = add_seconds(finish) + cancel_date = add_seconds(cancel) + + escrow_tx=xrpl.models.transactions.EscrowCreate( + account=wallet.address, + amount=amount, + destination=destination, + finish_after=finish_date, + cancel_after=cancel_date + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(escrow_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def finish_time_escrow(seed, owner, sequence): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + finish_tx=xrpl.models.transactions.EscrowFinish( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(finish_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def get_escrows(account): + client=JsonRpcClient(testnet_url) + acct_escrows=AccountObjects( + account=account, + ledger_index="validated", + type="escrow" + ) + response=client.request(acct_escrows) + return response.result + +def cancel_time_escrow(seed, owner, sequence): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + cancel_tx=xrpl.models.transactions.EscrowCancel( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(cancel_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def get_transaction(account, ledger_index): + client=JsonRpcClient(testnet_url) + tx_info=AccountTx( + account=account, + ledger_index=int(ledger_index) + ) + response=client.request(tx_info) + return response.result diff --git a/content/_code-samples/quickstart/py/mod9.py b/content/_code-samples/quickstart/py/mod9.py new file mode 100644 index 0000000000..78499a22e2 --- /dev/null +++ b/content/_code-samples/quickstart/py/mod9.py @@ -0,0 +1,55 @@ +import xrpl +from xrpl.clients import JsonRpcClient +from xrpl.wallet import Wallet +from datetime import datetime +from xrpl.models.transactions import EscrowCreate, EscrowFinish + +testnet_url = "https://s.altnet.rippletest.net:51234" + +def add_seconds(numOfSeconds): + new_date = datetime.now() + if new_date != '': + new_date = xrpl.utils.datetime_to_ripple_time(new_date) + new_date = new_date + int(numOfSeconds) + return new_date + + +def create_conditional_escrow(seed, amount, destination, cancel, condition): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + cancel_date = add_seconds(cancel) + + escrow_tx=xrpl.models.transactions.EscrowCreate( + account=wallet.address, + amount=amount, + destination=destination, + cancel_after=cancel_date, + condition=condition + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(escrow_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def finish_conditional_escrow(seed, owner, sequence, condition, fulfillment): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + finish_tx=xrpl.models.transactions.EscrowFinish( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence), + condition=condition, + fulfillment=fulfillment + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(finish_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply diff --git a/content/_snippets/checkcash-prereqs.ja.md b/content/_snippets/checkcash-prereqs.ja.md index cc94d48018..ea2edeb1c6 100644 --- a/content/_snippets/checkcash-prereqs.ja.md +++ b/content/_snippets/checkcash-prereqs.ja.md @@ -4,6 +4,6 @@ Checkを換金するための前提条件は、正確な金額を換金する場 - 例えば、以下の例では、あるCheckのIDとして`838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334`を使用していますが、各ステップをご自分で行う際には、異なるIDを使用する必要があります。 - Checkに記載されている受取人の**アドレス**と**秘密鍵**。このアドレスは、Checkオブジェクトの`Destination`アドレスと一致している必要があります。 - 発行済み通貨用のCheckの場合は、ご自身(受取人)にイシュアーに対するトラストラインがある必要があります。このトラストライン上のご自身の限度額は、受け取る金額を追加するための残高より十分高くなければなりません。 - - トラストラインと限度額について詳しくは、[発行済み通貨](issued-currencies.html)および[トラストラインと発行](trust-lines-and-issuing.html)を参照してください。 + - トラストラインと限度額について詳しくは、[トークン](tokens.html)および[トラストラインと発行](trust-lines-and-issuing.html)を参照してください。 - [トランザクションに安全に署名できる手段](secure-signing.html)。 - XRP Ledgerに接続できる[クライアントライブラリ](client-libraries.html)か、それとも[HTTPライブラリ、WebSocketライブラリなど](get-started-using-http-websocket-apis.html)。 diff --git a/content/_snippets/clawback-disclaimer.ja.md b/content/_snippets/clawback-disclaimer.ja.md new file mode 100644 index 0000000000..78685f6763 --- /dev/null +++ b/content/_snippets/clawback-disclaimer.ja.md @@ -0,0 +1 @@ +_[Clawback amendment](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-39d-clawback)が必要です。_ diff --git a/content/_snippets/data_types/address.ja.md b/content/_snippets/data_types/address.ja.md index 4e2c09533a..757664de90 100644 --- a/content/_snippets/data_types/address.ja.md +++ b/content/_snippets/data_types/address.ja.md @@ -1,13 +1,12 @@ XRP Ledgerのアカウントは、XRP Ledgerの[base58][]フォーマットのアドレスで識別されます。このアドレスはアカウントのマスター[公開鍵](https://en.wikipedia.org/wiki/Public-key_cryptography)から生成され、マスター公開鍵は秘密鍵から生成されます。アドレスはJSON文字列で記述され、以下の特徴があります。 -* 長さは25から35文字です -* 文字`r`で始まります +* 長さは25から35文字 +* 文字`r`から始まる +* 数字"`0`"、大文字"`O`"、大文字"`I`"、小文字"`l`"を除く英数字 +* 大文字と小文字を区別 +* 4バイトのチェックサムが含まれており、ランダムな文字から有効なアドレスが生成される確率はおよそ232分の1 - **注記:** XRPコミュニティは、取引所およびウォレットで[宛先タグ](source-and-destination-tags.html)の代わりに使用できる新しいフォーマット、**X**アドレスを[提案](https://github.com/XRPLF/XRPL-Standards/issues/6)(これをサポートする[コーデック](https://github.com/xrp-community/xrpl-tagged-address-codec)も開発)しました。これらの「パック化」したアドレスは、`r`ではなく`X`で開始します。詳細は、[𝗫-address format](https://xrpaddress.info/)のサイトを参照してください。 +> **注記:** [宛先タグ](source-and-destination-tags.html)をアドレスに「組み込む」**X**アドレス形式もあります。これらのアドレスは`X`(メインネット用)または`T`([テストネットワーク](parallel-networks.html)用)で始まります。取引所とウォレットは、顧客が知る必要のあるすべてのデータを1つの値で表すためにXアドレスを使用できます。詳細については、[Xアドレスフォーマットサイト](https://xrpaddress.info/)と[コーデック](https://github.com/xrp-community/xrpl-tagged-address-codec)をご覧ください +> +> XRP Ledgerプロトコルは「クラシック」アドレスのみをネイティブにサポートしていますが、多くの[クライアントライブラリ](client-libraries.html)はXアドレスもサポートしています。 -* 英数字を使用します(数字「`0`」、大文字「`O`」、大文字「`I`」、小文字「`l`」を除く) -* 大/小文字を区別します -* 4バイトのチェックサムを含むため、ランダムな文字から有効なアドレスが生成される確率はおよそ2^32分の1となります - -{% if currentpage.md != "concept-accounts.md" %} -詳しくは、[アカウント](accounts.html)と[base58エンコード](base58-encodings.html)を参照してください。{% endif %} diff --git a/content/_snippets/data_types/address.md b/content/_snippets/data_types/address.md index 2edc68cc88..c866e9df4d 100644 --- a/content/_snippets/data_types/address.md +++ b/content/_snippets/data_types/address.md @@ -9,7 +9,3 @@ Accounts in the XRP Ledger are identified by an address in the XRP Ledger's [bas > **Note:** There is also an **X**-address format that "packs" a [destination tag](source-and-destination-tags.html) into the address. These addresses start with an `X` (for Mainnet) or a `T` (for [test networks](parallel-networks.html)). Exchanges and wallets can use X-addresses to represent all the data a customer needs to know in one value. For more information, see the [X-address format site](https://xrpaddress.info/) and [codec](https://github.com/xrp-community/xrpl-tagged-address-codec). > > The XRP Ledger protocol only supports "classic" addresses natively, but many [client libraries](client-libraries.html) support X-addresses too. - -{% if currentpage.md != "concept-accounts.md" %} -For more information, see [Accounts](accounts.html) and [base58 Encodings](base58-encodings.html). -{% endif %} diff --git a/content/_snippets/post-rippled-install.ja.md b/content/_snippets/post-rippled-install.ja.md index 39c0c9ddd9..5586c35eb8 100644 --- a/content/_snippets/post-rippled-install.ja.md +++ b/content/_snippets/post-rippled-install.ja.md @@ -4,12 +4,9 @@ `rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバーが完全に機能するようになります。このサーバーを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバーがネットワークと同期されているかどうかを判別するには、[`rippled`サーバーの状況](rippled-server-states.html)を使用します。[`rippled`のコマンドラインインターフェイス](get-started-using-http-websocket-apis.html#コマンドライン)を使用すれば、これを迅速にテストできます。 -{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %} - $ ./rippled server_info -{% else %} - $ /opt/ripple/bin/rippled server_info -{% endif %} +```sh +rippled server_info +``` rippled APIを使用した`rippled`サーバーとの通信について詳しくは、[rippled API reference](http-websocket-apis.html)を参照してください。 @@ -27,20 +24,6 @@ rippled APIを使用した`rippled`サーバーとの通信について詳しく 構成の変更を有効にするには、`rippled`を再起動する必要があります。 -{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-centos-rhel-with-yum" %} - $ sudo systemctl restart rippled.service - -{% elif currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %} - - -* Ctrl-Cを使用して`rippled`を停止し、その後再起動します。 - - $ ./rippled - -{% endif %} - `[debug_logfile]`セクションまたは`[database_path]`セクションを変更すると、`rippled`を実行するユーザーに、新しく構成したパスの所有権を付与する必要が生じる場合があります。 ### 更新 diff --git a/content/_snippets/post-rippled-install.md b/content/_snippets/post-rippled-install.md index 6b71398d29..2a17b339e4 100644 --- a/content/_snippets/post-rippled-install.md +++ b/content/_snippets/post-rippled-install.md @@ -2,12 +2,9 @@ It can take several minutes to sync with the rest of the XRP Ledger network, dur You can use the [`rippled` commandline interface](get-started-using-http-websocket-apis.html#commandline) to see if your server is synced with the network: -{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %} - ./rippled server_info -{% else %} - /opt/ripple/bin/rippled server_info -{% endif %} +```sh +rippled server_info +``` If the `server_state` in the response is `full` or `proposing`, then your server is fully synced to the network. Otherwise, you may need to wait longer. Fresh servers usually sync within 15 minutes; servers that already have [ledger history](ledger-history.html) stored can take longer. @@ -21,25 +18,11 @@ Having trouble getting your server started? See [rippled Server Won't Start](ser `rippled` should connect to the XRP Ledger with the default configuration. However, you can change your settings by editing the `rippled.cfg` file. For recommendations about configuration settings, see [Capacity Planning](capacity-planning.html). -{% include '_snippets/conf-file-location.md' %} +{% include '_snippets/conf-file-location.md' %} See [the `rippled` GitHub repository](https://github.com/XRPLF/rippled/blob/master/cfg/rippled-example.cfg) for a description of all configuration options. -You must restart `rippled` for any configuration changes to take effect: - - -{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-centos-rhel-with-yum" %} - sudo systemctl restart rippled.service - -{% elif currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or - currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %} - - * Use Ctrl-C to stop `rippled`, then start it again: - - ./rippled - -{% endif %} +You must restart `rippled` for any configuration changes to take effect. If you change the `[debug_logfile]` or `[database_path]` sections, you may need to grant ownership of the new configured path to the user you run `rippled` as. diff --git a/content/_snippets/rippled-api-links.md b/content/_snippets/rippled-api-links.md index 980214952a..3c9b3ed2f6 100644 --- a/content/_snippets/rippled-api-links.md +++ b/content/_snippets/rippled-api-links.md @@ -89,6 +89,8 @@ {% if target.lang == "ja" %} [{{ledger_entry}}オブジェクト]: {{ledger_entry|lower}}-object.html [{{ledger_entry}} オブジェクト]: {{ledger_entry|lower}}-object.html +[{{ledger_entry}}エントリ]: {{ledger_entry|lower}}-object.html +[{{ledger_entry}} エントリ]: {{ledger_entry|lower}}-object.html {% endif %} {% else %} [{{ledger_entry}} object]: {{ledger_entry|lower}}.html @@ -96,6 +98,8 @@ {% if target.lang == "ja" %} [{{ledger_entry}}オブジェクト]: {{ledger_entry|lower}}.html [{{ledger_entry}} オブジェクト]: {{ledger_entry|lower}}.html +[{{ledger_entry}}エントリ]: {{ledger_entry|lower}}.html +[{{ledger_entry}} エントリ]: {{ledger_entry|lower}}.html {% endif %} {% endif %} {% endfor %} diff --git a/content/concepts/accounts/account-types.ja.md b/content/concepts/accounts/account-types.ja.md deleted file mode 100644 index 0e5e908289..0000000000 --- a/content/concepts/accounts/account-types.ja.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -html: account-types.html -parent: accounts.html -blurb: XRP Ledgerで自動的にトランザクションを送信するビジネスは、リスクを最小限に抑えるために目的ごとに別のアドレスを設定することをおすすめします。 -labels: - - トークン - - セキュリティ ---- -# 発行アドレスと運用アドレス - -{% include '_snippets/issuing-and-operational-addresses-intro.ja.md' %} - - -## 資金のライフサイクル - -XRP LedgerのXRP以外の残高はすべて、2つのXRP Ledgerアドレス間の会計上の関係に関連付けられている _発行済み通貨_ です。Rippleが推奨する役割の分割を金融機関が行うと、その金融機関に関連する資金の流れは循環する傾向にあります。 - -[![図: 発行アドレスからスタンバイアドレス、運用アドレス、顧客アドレスおよびパートナーアドレスに移動し、最後に発行アドレスに戻る資金フロー](img/funds_flow_diagram.png)](img/funds_flow_diagram.png) - -発行アドレスはペイメントの送金時に、XRP Ledgerの会計上の関係に残高を作成します。ユーザーはXRP Ledger内のさまざまな会計上の関係と残高を交換できます。このため、XRP以外の残高を表す用語として _イシュアンス_ を使用します。イシュアンスの額は、発行アドレスの側から見ると債務を表すため、マイナスです。同じイシュアンスの額を発行アドレスの相手側から見ると、プラスになります。発行アドレスがペイメントを受領すると、送信されたイシュアンスが消去され、発行アドレスの債務が減少します。 - -イシュアンスは発行アドレスからスタンバイアドレスに送信されるか、または運用アドレスに直接送信されます。これらのイシュアンスはスタンバイアドレスから運用アドレスに送信されます。運用アドレスから他の取引相手(流動性プロバイダー、パートナー、その他の顧客など)にペイメントが送信されます。すべてのイシュアンスは発行アドレスとの会計上の関係に関連付けられているため、イシュアンスのペイメントと取引は、発行アドレスを「通じてRippling」されます。ペイメントが行われると、送金元と発行アドレスの会計上の関係において送金元の残高から支払額が引き落とされ、受取人と発行アドレスの会計上の関係において受取人の残高に支払額が入金されます。XRP Ledgerでは、オーダーブックや[資金のRipplingに対応する流動性プロバイダー](rippling.html)を通じて複数のイシュアーを結び付ける、より複雑な[パス](paths.html)もサポートされています。 - -## 発行アドレス - -発行アドレスは、金庫に似ています。パートナーアドレス、顧客アドレス、運用アドレスは、発行アドレスとの間で会計上の関係(トラストライン)を作成しますが、発行アドレスから送信されるトランザクションは可能な限り少ない数に抑えられます。人間のオペレーターが定期的に、発行アドレスからトランザクションを作成、署名し、スタンバイアドレスまたは運用アドレスの残高を補充します。このようなトランザクションの署名に使用されるシークレットキーには、インターネットに接続されたどのコンピューターからもアクセスできないことが極めて重要です。 - -金庫とは異なり、発行アドレスは顧客またはパートナーからのペイメントを直接受領できます。XRP Ledgerのトランザクションはすべて公開されているため、自動システムは発行アドレスからのペイメントを監視する際にシークレットキーを必要としません。 - -### 発行アドレスの漏えい - -不正使用者は金融機関の発行アドレスのシークレットキーを入手すると、際限なく新しいイシュアンスを作成し、分散型取引所でそのイシュアンスを取引できるようになります。これにより、金融機関が正式に取得したイシュアンスを識別して適切に清算することが難しくなります。金融機関の発行アドレスが乗っ取られた場合には、金融機関が新たに発行アドレスを作成する必要があり、また古い発行アドレスと会計上の関係を有するすべてのユーザーは新しいアドレスで、アカウントとの関係を新たに作成する必要があります。 - -### 複数の発行アドレス - -金融機関はXRP Ledgerで1つの発行アドレスから複数の通貨を発行できます。ただし、いくつかの設定([送金手数料](transfer-fees.html)のパーセンテージや[Global Freeze](freezes.html)の状況など)は、1つのアドレスから発行されるすべての通貨に同様に適用されます。金融機関が通貨ごとに設定を変えて柔軟に管理したい場合、金融機関は通貨ごとに異なる発行アドレスを使用する必要があります。 - -## 運用アドレス - -運用アドレスはレジに似ています。イシュアンスを顧客とパートナーに送信して、金融機関に代わってペイメントを行います。トランザクションに自動的に署名するには、運用アドレスのシークレットキーをインターネットに接続されたサーバーに保管する必要があります。(シークレットキーは暗号化して保管できますが、サーバーがトランザクションに署名する際にシークレットキーを暗号化解除する必要があります。)顧客とパートナーは、運用アドレスとの会計上の関係を作成すべきではありません。 - -各運用アドレスではイシュアンスの残高が限られています。運用アドレスの残高が少なくなると、金融機関は残高を補充するため、発行アドレスまたはスタンバイアドレスから送金します。 - -### 運用アドレスの漏えい - -不正使用者が運用アドレスのシークレットキーを入手した場合に金融機関が失う可能性のある通貨額は、最大でも運用アドレスが保有している額までです。金融機関は、顧客やパートナーからのアクションなしに、新しい運用アドレスに切り替えることができます。 - -## スタンバイアドレス - -金融機関がリスクと利便性のバランスを保つためのもう1つの手段として、発行アドレスと運用アドレスの中間ステップとして「スタンバイアドレス」を利用することができます。金融機関はスタンバイアドレスという追加のXRP Ledgerアドレスに資金を供給できます。このアドレスのキーはオンライン上に保管されず、別の信頼できるユーザーに預けられています。 - -運用アドレスの資金が少なくなると、信頼できるユーザーがスタンバイアドレスを使用して運用アドレスの残高を補充できます。スタンバイアドレスの資金が少なくなると、金融機関は発行アドレスを使用して1回のトランザクションでスタンバイアドレスにより多くの額の通貨を送金できます。スタンバイアドレスは、送金された通貨を必要に応じてスタンバイアドレス間で分散できます。これにより発行アドレスのセキュリティが強化され、発行アドレスが実行する合計トランザクション数が減少し、1つの自動化システムの管理下に過剰な資金が残ることがなくなります。 - -運用アドレスと同様に、スタンバイアドレスは顧客やパートナーではなく発行アドレスとの間に会計上の関係を確立する必要があります。運用アドレスに適用される注意事項はすべてスタンバイアドレスにも適用されます。 - -### スタンバイアドレスの漏えい - -スタンバイアドレスの漏えいが発生した場合、運用アドレスが漏えいした場合と同様の影響が及びます。不正使用者がスタンバイアドレスに保有される残高を盗むことが可能となり、金融機関は顧客やパートナーからのアクションなしに新しいスタンバイアドレスに切り替えることができます。 - -## 関連項目 - -- **コンセプト:** - - [アカウント](accounts.html) - - [暗号鍵](cryptographic-keys.html) -- **チュートリアル:** - - [XRP Ledgerゲートウェイの開設](stablecoin-issuer.html) - - [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html) - - [レギュラーキーペアの変更または削除](change-or-remove-a-regular-key-pair.html) -- **リファレンス:** - - [account_infoメソッド][] - - [SetRegularKeyトランザクション][] - - [AccountRootオブジェクト](accountroot.html) - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/accounts/accounts.ja.md b/content/concepts/accounts/accounts.ja.md deleted file mode 100644 index f5c4139caa..0000000000 --- a/content/concepts/accounts/accounts.ja.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -html: accounts.html -parent: concepts.html -blurb: XRP Ledgerのアカウントについて説明します。アカウントはトランザクションを送信でき、XRPを保有できます。 -labels: - - アカウント - - 支払い ---- -# アカウント - -XRP Ledgerの「アカウント」は、XRPの所有者と[トランザクション](transaction-formats.html)の送信者を表します。アカウントの主な要素は次のとおりです。 - -- 識別用の**アドレス**。例えば、`rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn` - - **注記:** XRPコミュニティは、取引所およびウォレットで[宛先タグ](source-and-destination-tags.html)の代わりに使用できる新しいフォーマット、**X**アドレスを[提案](https://github.com/XRPLF/XRPL-Standards/issues/6)(これをサポートする[コーデック](https://github.com/xrp-community/xrpl-tagged-address-codec)も開発)しました。これらの「パック化」したアドレスは、`r`ではなく`X`で開始します。詳細は、[XRPL 𝗫-address format](https://xrpaddress.info/)のサイトを参照してください。 - -- **XRPの残高**。このXRPの一部は、[準備金](reserves.html)用に確保されています。 -- **シーケンス番号**。このアカウントから送信されるトランザクションがすべて、正しい順序で、それぞれ1回のみ適用されるようにします。トランザクションを実行するには、トランザクションのシーケンス番号と送金元のシーケンス番号が一致する必要があります。その後も、トランザクションが適用されている限り、アカウントのシーケンス番号は1ずつ増加します。(関連項目: [基本的なデータタイプ: アカウントシーケンス](basic-data-types.html#アカウントシーケンス)) -- このアカウントと残高に影響を及ぼした**取引の履歴**。 -- [トランザクションの承認](transactions.html#トランザクションの承認)方法。以下に例を示します。 - - アカウント固有のマスターキーのペア。([無効](accountset.html)にできますが、変更はできません。) - - [ローテーションで使用](setregularkey.html)できる「レギュラー」キーペア。 - - [マルチシグ](multi-signing.html)の署名者のリスト。(アカウントのコアデータとは別に保存されます。) - -アカウントのコアデータは、レジャーのデータツリーの[AccountRoot](accountroot.html)レジャーのオブジェクトタイプに保存されます。アカウントは、他の複数のタイプのデータの所有者(または部分的な所有者)になることもできます。 - -**ヒント:** XRP Ledgerの「アカウント」は、財務上の用途(例:「銀行口座」)やコンピューター上の用途(例:「UNIXアカウント」)で使用されます。XRP以外の通貨および資産はXRP Ledgerアカウント自体には保存されません。そのような資産はそれぞれ、両当事者を結ぶ「トラストライン」と呼ばれる会計関係に保存されます。 - -### アカウントの作成 - -「アカウント作成」専用のトランザクションはありません。Paymentトランザクション でまだアカウントを所有していない数学的に有効なアドレスに[アカウントの準備金](reserves.html)以上のXRPが送信されると、[Paymentトランザクション][]で自動的に新しいアカウントが作成されます。これはアカウントの _資金提供_ と呼ばれ、レジャーに[AccountRootオブジェクト](accountroot.html)が作成されます。それ以外のトランザクションでアカウントを作成することはできません。 - -**注意:** アカウントを資金提供することによって、そのアカウントに対して特別な権限を持つことには**なりません**。アカウントのアドレスに対応するシークレットキーを持っている人なら誰でも、アカウントとそれに含まれるすべてのXRPの完全制御権を持っています。一部のアドレスでは、誰もシークレットキーを持っていない場合があります。その場合、アカウントは[ブラックホール](#特別なアドレス)になり、XRPは永久に失われます。 - -XRP Ledgerでアカウントを取得する一般的な方法は次のとおりです。 - -1. ランダム性の強いソースからキーペアを生成し、そのキーペアのアドレスを計算します。(例えば、[wallet_proposeメソッド][]を使用して計算することができます。) - -2. XRP Ledgerにアカウントをすでに持っているユーザーに、生成したアドレスにXRPを送信してもらいます。 - - - 例えば、一般の取引所でXRPを購入し、その取引所から、指定したアドレスにXRPを引き出すことができます。 - - **注意:** 自身のXRP Ledgerアドレスで初めてXRPを受け取る場合は[アカウントの準備金](reserves.html)(現在は10 XRP)を支払う必要があります。この金額のXRPは無期限に使用できなくなります。一方で、一般の取引所では通常、顧客のXRPはすべて、共有されたいくつかのXRP Ledgerアカウントに保有されているため、顧客はその取引所で個々のアカウントの準備金を支払う必要はありません。引き出す前に、XRP Ledgerに直接アカウントを保有することが、金額に見合う価値があるかどうかを検討してください。 - -## アドレス - -{% include '_snippets/data_types/address.ja.md' %} - -有効なアドレスに資金供給することで、そのアドレスを[XRP Ledgerのアカウントにする](#アカウントの作成)ことができます。[レギュラーキー](setregularkey.html)または[署名者リスト](multi-signing.html)のメンバーを表すために資金供給されていないアドレスを使用することもできます。資金供給されたアカウントのみがトランザクションの送信者になることができます。 - -キーペアを始め、有効なアドレスの作成は、厳密な数学的演算です。キーペアの生成と、そのアドレスの計算は完全にオフラインで行うことができます。XRP Ledgerやその他の関係者と通信する必要はありません。公開鍵からアドレスへの変換には一方向のハッシュ関数が含まれるため、公開鍵がアドレスと一致することは確認できますが、アドレスのみから公開鍵を導出することはできません。(このことが、署名付きのトランザクションに送信者の公開鍵 _と_ アドレスが含まれる理由の1つとなっています。) - -XRP Ledgerアドレスの計算方法の技術的な詳細は、[アドレスのエンコード](#アドレスのエンコード)を参照してください。 - - -### 特別なアドレス - -XRP Ledgerでは、過去の使用という点で、一部のアドレスに特別な意味があります。多くの場合、これらのアドレスは「ブラックホール」アドレスです。つまり、このアドレスは既知のシークレットキーから派生したものではありません。アドレスのみからシークレットキーを推測することは事実上不可能なため、ブラックホールアドレスが保有しているXRPは永久に失われます。 - -| アドレス | 名前 | 意味 | ブラックホール? | -|-----------------------------|------|---------|-------------| -| rrrrrrrrrrrrrrrrrrrrrhoLvTp | ACCOUNT_ZERO | 値`0`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。ピアツーピア通信では、このアドレスは、XRPの発行者として`rippled`で使用されます。 | はい | -| rrrrrrrrrrrrrrrrrrrrBZbvji | ACCOUNT_ONE | 値`1`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。レジャーの[RippleState項目](ripplestate.html)では、このアドレスは、トラストライン残高の発行者のプレースホルダーとして使用されます。 | はい | -| rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh | ジェネシスアカウント | `rippled`で新しいジェネシスレジャーが一から開始される場合(例えば、スタンドアロンモード)、このアカウントはすべてのXRPを保持します。このアドレスは、シード値「masterpassphrase」から生成されており、この値は[ハードコーディング](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 | いいえ | -| rrrrrrrrrrrrrrrrrNAMEtxvNvQ | Ripple名予約のブラックホール | 以前は、Rippleでは、このアカウントにXRPを送信してRipple名を予約するようユーザーに求めていました。 | はい | -| rrrrrrrrrrrrrrrrrrrn5RM1rHd | NaNアドレス | 以前のバージョンの[ripple-lib](https://github.com/XRPLF/xrpl.js)では、XRP Ledgerの[base58][]文字列エンコード形式を使用して、値[NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN)をエンコードするときにこのアドレスを生成しました。 | はい | - - -## アカウントの削除 - -[DeletableAccounts amendment](known-amendments.html#deletableaccounts)(有効2020-05-08)では、アカウントの削除は可能になりました。 - -削除するには、アカウントが次の要件を満たしている必要があります。 - -- アカウントの`Sequence`番号に256を加えた値が、現在の[レジャーインデックス][]未満であること。 -- アカウントが次のタイプの[レジャーオブジェクト](ledger-object-types.html)のいずれにも(送金元または受取人として)関連付けられていないこと。 - - `Escrow` - - `PayChannel` - - `RippleState` - - `Check` -- アカウントがレジャー内に所有するオブジェクトが1000個未満であること。 -- [AccountDeleteトランザクション][]では、少なくとも1アイテムの[所有者準備金](reserves.html)(現在2 XRP)に相当する特別な[トランザクションコスト][]を支払う必要があります。 - -アカウントは、削除した後、通常の[アカウント作成](#アカウントの作成)方法でレジャーに再作成できます。削除後に再作成されたアカウントと、初めて作成されたアカウントに違いはありません。 - -Bitcoinやその他の多くの暗号資産とは異なり、新バージョンのXRP Ledgerの公開レジャーチェーンにはそれぞれレジャーの全状態が含まれており、新規アカウントが増えるごとにサイズが大きくなります。そのため、XRP Ledgerの新規アカウントは必要な場合以外は作成しないでください。アカウントを削除することで、アカウントの[準備金](reserves.html)である10 XRPの一部を復元できますが、そのためには少なくとも2 XRPを消却する必要があります。 - -多くのユーザーに代わって価値を送受信する金融機関などは、XRP Ledgerでは1つ(または少数)のアカウントのみを使用し、顧客との間の個別の決済を区別するために[**ソースタグ**と**宛先タグ**](source-and-destination-tags.html)を使用できます。 - - - - -## トランザクション履歴 - -XRP Ledgerでは、トランザクション(取引)履歴をトランザクションの「スレッド」によって追跡することができます。これはトランザクションの識別用のハッシュとレジャーインデックスにリンクされています。`AccountRoot`レジャーオブジェクトには、それを最後に修正したトランザクションの識別用のハッシュとレジャーが含まれます。そのトランザクションのメタデータには、`AccountRoot`ノードの前の状態が含まれているため、この方法で1つのアカウントの履歴を繰り返すことができます。このトランザクション履歴には、`AccountRoot`ノードを直接変更するトランザクションが含まれます。以下に例を示します。 - -- アカウントによって送信されるトランザクション。アカウントの`Sequence`番号が変更されるため。このようなトランザクションでは、[トランザクションコスト](transaction-cost.html)によりアカウントのXRP残高も変更されます。 -- アカウントのXRP残高を変更したトランザクション。例えば、着信する[Paymentトランザクション][]や他のタイプの取引(例:[PaymentChannelClaim][]や[EscrowFinish][])。 - -アカウントの _概念的な_ トランザクション履歴には、アカウントの所有オブジェクトとXRP以外の残高を変更したトランザクションも含まれます。これらのオブジェクトは別個のレジャーオブジェクトであり、それぞれに影響を及ぼした独自のトランザクションスレッドが含まれます。アカウントのレジャーの履歴全体がある場合は、それをたどって、その履歴によって作成または変更されたレジャーオブジェクトを見つけることができます。「完全」なトランザクション履歴には、トランザクションで所有されているオブジェクトの履歴が含まれます。例を以下に示します。 - -- `RippleState`オブジェクト(トラストライン)。アカウントに関連付けられています。 -- `DirectoryNode`オブジェクト(特にアカウントの所有オブジェクトを追跡する所有者ディレクトリ)。 -- `Offer`オブジェクト。分散型取引所でのアカウントの未処理の取引注文を表すオブジェクト。 -- `PayChannel`アカウントとの間の非同期のPayment Channelを表すオブジェクト。 -- `Escrow`時間または暗号条件によってロックされ、アカウントとの間の保留中の支払いを表すオブジェクト。 -- `SignerList`[マルチシグ](multi-signing.html)によってアカウントのトランザクションを承認できるアドレスのリストを表すオブジェクト。 - -これらの各オブジェクトの詳細は、[レジャーフォーマットのリファレンス](ledger-data-formats.html)を参照してください。 - - -## アドレスのエンコード - -**ヒント:** これらの技術的な詳細は、XRP Ledgerとの互換性を保つために低レベルのライブラリソフトウェアを構築しているユーザーのみを対象としています。 - -[[ソース]](https://github.com/XRPLF/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140 "Source") - -XRP Ledgerのアドレスは、[base58][]_形式のディクショナリ_`rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`を使用してエンコードされています。XRP Ledgerはbase58でいくつかのタイプのキーをエンコードするため、それらを区別するためにエンコードされたデータの前に1バイトの「タイププレフィクス」(「バージョンプレフィクス」とも呼ばれます)を付けます。タイププレフィクスによりアドレスは通常、base58形式の異なる文字で始まります。 - -次の図は、キーとアドレスの関係を示しています。 - -[![マスター公開鍵 + プレフィクスの種類 → アカウントID + チェックサム → アドレス](img/address-encoding.ja.png)](img/address-encoding.ja.png) - -公開鍵からXRP Ledgerアドレスを計算する式は次のとおりです。コード例全体については、[`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/js/encode_address.js)を参照してください。パスフレーズまたはシード値から公開鍵を導出するプロセスについては、[鍵の導出](cryptographic-keys.html#鍵導出)を参照してください。 - -1. 次の必須アルゴリズムをインポートします。SHA-256、RIPEMD160、base58。base58のディクショナリーを設定します。 - - 'use strict'; - const assert = require('assert'); - const crypto = require('crypto'); - const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'; - const base58 = require('base-x')(R_B58_DICT); - - assert(crypto.getHashes().includes('sha256')); - assert(crypto.getHashes().includes('ripemd160')); - -2. 33バイトのECDSA secp256k1公開鍵、または32バイトのEd25519公開鍵で始めます。Ed25519キーの場合は、キーの前にバイト`0xED`を付けます。 - - const pubkey_hex = - 'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32'; - const pubkey = Buffer.from(pubkey_hex, 'hex'); - assert(pubkey.length == 33); - -3. 公開鍵のSHA-256ハッシュの[RIPEMD160](https://en.wikipedia.org/wiki/RIPEMD)ハッシュを計算します。この値は「Account ID」です。 - - const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey); - const pubkey_outer_hash = crypto.createHash('ripemd160'); - pubkey_outer_hash.update(pubkey_inner_hash.digest()); - const account_id = pubkey_outer_hash.digest(); - -4. アカウントIDのSHA-256ハッシュのSHA-256ハッシュを計算します。最初の4バイトを使用ます。この値が「チェックサム」です。 - - const address_type_prefix = Buffer.from([0x00]); - const payload = Buffer.concat([address_type_prefix, account_id]); - const chksum_hash1 = crypto.createHash('sha256').update(payload).digest(); - const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest(); - const checksum = chksum_hash2.slice(0,4); - -5. ペイロードとチェックサムを連結します。連結バッファーのbase58値を計算します。この結果が、該当のアドレスになります。 - - const dataToEncode = Buffer.concat([payload, checksum]); - const address = base58.encode(dataToEncode); - console.log(address); - // rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN - - -## 関連項目 - -- **コンセプト:** - - [準備金](reserves.html) - - [暗号鍵](cryptographic-keys.html) - - [発行アドレスと運用アドレス](account-types.html) -- **リファレンス:** - - [account_infoメソッド][] - - [wallet_proposeメソッド][] - - [AccountSetトランザクション][] - - [Paymentトランザクション][] - - [AccountRootオブジェクト](accountroot.html) -- **チュートリアル:** - - [アカウント設定の管理(カテゴリー)](manage-account-settings.html) - - [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html) - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/accounts/deleting-accounts.md b/content/concepts/accounts/deleting-accounts.md index e68ccaad3c..04b054fb24 100644 --- a/content/concepts/accounts/deleting-accounts.md +++ b/content/concepts/accounts/deleting-accounts.md @@ -18,7 +18,7 @@ After an account has been deleted, it can be re-created in the ledger through th To be deleted, an account must meet the following requirements: - The account's `Sequence` number plus 256 must be less than the current [Ledger Index][]. -- The account must not be linked to any of the following types of [ledger objects](ledger-object-types.html) (as a sender or receiver): +- The account must not be linked to any of the following types of [ledger entries](ledger-object-types.html) (as a sender or receiver): - `Escrow` - `PayChannel` - `RippleState` diff --git a/content/concepts/transactions/multi-signing.md b/content/concepts/accounts/multi-signing.md similarity index 100% rename from content/concepts/transactions/multi-signing.md rename to content/concepts/accounts/multi-signing.md diff --git a/content/concepts/accounts/reserves.ja.md b/content/concepts/accounts/reserves.ja.md deleted file mode 100644 index 127a651184..0000000000 --- a/content/concepts/accounts/reserves.ja.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -html: reserves.html -parent: accounts.html -blurb: XRP Ledgerアカウントでは、レジャーデータ内のスパムを減らすためにXRPの準備金が必要です。 -labels: - - 手数料 - - アカウント -top_nav_grouping: 人気ページ ---- -# 準備金 - -XRP Ledgerでは、スパムや悪意のある使用によって、共有グローバル台帳(レジャー)が過度に大きくならないように、 _準備金_ の仕組みをXRPに適用しています。現在一般に市販されているのマシンで、処理中の現行レジャーを常にRAMに保存でき、全履歴がディスクに収まるように、技術の向上に合わせて台帳が大きくなるのを制限することが目的です。 - -取引(トランザクション)を送信するには、各アドレスが共有グローバル台帳内に最小量のXRPを保有している必要があります。このXRPを他のアドレスに送信することはできません。新しいアドレスに資金供給するには、必要準備金を満たすのに十分なXRPを送信する必要があります。 - -現在の最低必要準備金は**10 XRP**です。(これは、レジャーにそれ以外のオブジェクトを所有していないアドレスにかかるコストです。) - - -## 基本準備金と所有者準備金 - -必要な準備金は2つの部分に分けられます。 - -* **基本準備金**は、レジャーの各アドレスに必要なXRPの最小額です。現在、この準備金は、10 XRP(`10000000` drop)です。 -* **所有者準備金**は、アドレスがレジャーに所有しているオブジェクトごとに必要な準備金の増加額です。現在、これは1アイテムにつき2 XRP(`2000000` drop)です。 - - -### 所有者準備金 - -レジャー内の多くのオブジェクトは特定のアドレスによって所有され、そのアドレスに対する必要準備金と見なされます。レジャーから削除されたオブジェクトは、所有者の必要準備金にカウントされなくなります。 - -- [オファー](offer.html)はそれらを発行したアドレスによって所有されています。すべてが処理済みとなるか、または資金供給のないことが判明したオファーは、取引処理によって自動的に削除されます。または、所有者は、[OfferCancelトランザクション][]を送信するか、`OfferSequence`パラメーターを含む[OfferCreateトランザクション][]を送信することで、オファーを取り消すことができます。 -- [トラストライン](ripplestate.html)は2つのアドレス間で共有されます。所有者準備金は、いずれかまたは両方のアドレスに適用されます。どちらに適用されるかは、アドレスが制御するフィールドがデフォルト状態であるかどうかによって決まります。詳細については、[Contributing to the Owner Reserve](ripplestate.html#所有者の準備金への資金供給)を参照してください。 -- [MultiSignReserve Amendment][]がない場合、1つの[SignerList](signerlist.html)は、メンバーの数に応じて、所有者準備金用に3~10個のオブジェクトとしてカウントされます。[MultiSignReserve Amendment][]が有効になっている場合、1つのSignerListは、メンバーの数に関係なく、所有者準備金用に1つのオブジェクトとしてカウントされます。関連項目: [SignerListと準備金](signerlist.html#signerlistと準備金) -- [保留中の支払い(Escrow)](escrow-object.html)は、支払元のアドレスが所有します。 -- [Payment Channel](use-payment-channels.html)は、作成したアドレスが所有します。 -- [所有者ディレクトリー](directorynode.html)には、アドレスの所有者の準備金の対象となるすべてのレジャーオブジェクトが一覧表示されます。所有者ディレクトリー自体は準備金としてカウントされません。 -- [Checks](checks.html)は、作成したアドレス(送信先ではなく送信元)が所有します。 - - -#### 所有者準備金のエッジケース - -XRP Ledgerでは、 [OfferCreateトランザクション][]は、資産を保持する意図の明示的なステートメントであるとみなします。オファーが実行されることで、(限界値0で、その限界値を超える残高の)トラストラインが(そのようなトラストラインが存在しない場合)`taker_pays`の通貨で自動的に作成されます。ただし、オファーの所有者が新しく作られたトラストラインの所有者準備金を満たすための十分なXRPを保持していない場合、そのオファーは資金不足とみなされます。関連項目: [オファーのライフサイクル](offers.html#オファーのライフサイクル) - - -## 必要準備金を下回る - -トランザクション処理中、[トランザクションコスト](transaction-cost.html)によって、送信元アドレスのXRP残高の一部が消却されます。その結果、そのアドレスのXRPが必要準備金を下回る可能性があります。 - -アドレスが保持しているXRPが、現在の必要準備金を下回ると、XRPを他のアドレスに転送するトランザクションを送信したり、自身の準備金を増やしたりできなくなります。このような場合でも、そのアドレスはレジャー内に存在し、トランザクションコストを支払うのに十分なXRPを持っている限り、その他のトランザクションを送信することができます。必要準備金を満たすために十分なXRPを受け取った場合、またはそのアドレスのXRP保有額よりも[準備金の必要額が減少した](#必要準備金の変更)場合、そのアドレスはすべてのタイプのトランザクションを再度送信できるようになります。 - -**ヒント:** アドレスが必要準備金を下回った場合は、新しい[OfferCreateトランザクション][]を送信して、追加のXRP、または既存のトラストライン上の他の通貨を入手することができます。このような取引では、新しい[トラストライン](ripplestate.html)や[レジャー内のオファーノード](offer.html)を作成することはできないため、すでにオーダーブック内にあるオファーを実行するトランザクションのみを実行することができます。 - - -## 必要準備金の変更 - -XRP Ledgerには、XRPの価値の長期的な変動に応じて必要準備金を調整する仕組みがあります。変更はすべて、コンセンサスプロセスによる承認が必要です。詳細については、[手数料の投票](fee-voting.html)を参照してください。 - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/transactions/tickets.md b/content/concepts/accounts/tickets.md similarity index 100% rename from content/concepts/transactions/tickets.md rename to content/concepts/accounts/tickets.md diff --git a/content/concepts/consensus-protocol/consensus-protections.md b/content/concepts/consensus-protocol/consensus-protections.md index 7603bcabfa..7eac2ced27 100644 --- a/content/concepts/consensus-protocol/consensus-protections.md +++ b/content/concepts/consensus-protocol/consensus-protections.md @@ -32,11 +32,11 @@ The only way to confirm an invalid transaction would be to get at least 80% of t ## Software Vulnerabilities -As with any software system, bugs (or intentionally malicious code) in the implementation of the XRP Ledger Consensus Protocol, commonly deployed software packages, or their dependencies, are a problem to be taken seriously. Even bugs that cause a server to crash when it sees carefully crafted inputs can be abused to disrupt the progress of the network. Ripple takes precautions to address this threat in its reference implementations of XRP Ledger software, including: +As with any software system, bugs (or intentionally malicious code) in the implementation of the XRP Ledger Consensus Protocol, commonly deployed software packages, or their dependencies, are a problem to be taken seriously. Even bugs that cause a server to crash when it sees carefully crafted inputs can be abused to disrupt the progress of the network. XRP Ledger developers take precautions to address this threat in the reference implementations of XRP Ledger software, including: - An [open-source code base](https://github.com/XRPLF/rippled/), so any member of the public can review, compile, and independently test the relevant software. - A thorough and robust code review process for all changes to the official XRP Ledger repositories. -- Digital signatures from Ripple employees on all releases and official software packages. +- Digital signatures from well-known developers on all releases and official software packages. - Regularly-commissioned professional reviews for security vulnerabilities and insecurities. - A [bug bounty program](https://ripple.com/bug-bounty/) that rewards security researchers who responsibly disclose vulnerabilities. @@ -57,11 +57,11 @@ A "51% attack" is an attack on a blockchain system where one party controls more ## Validator Overlap Requirements -For all participants in the XRP Ledger to agree on what they consider validated, they must start by choosing a set of trusted validators that are fairly similar to the sets chosen by everyone else. In the worst case, less than about 90% overlap could cause some participants to diverge from each other. For that reason, Ripple publishes a signed list of recommended validators, including trustworthy and well-maintained servers run by the company, industry, and community. +For all participants in the XRP Ledger to agree on what they consider validated, they must start by choosing a set of trusted validators that are fairly similar to the sets chosen by everyone else. In the worst case, less than about 90% overlap could cause some participants to diverge from each other. For that reason, there are signed lists of recommended validators, meant to include trustworthy and well-maintained servers run by the industry and community. -By default, XRP Ledger servers are configured to use a validator list site run by Ripple. The site provides a list of recommended validators (also known as a recommended _Unique Node List_, or UNL), which Ripple updates periodically. Servers configured this way trust all validators in the latest version of the list, which ensures 100% overlap with others also using the same list. The default configuration includes a public key that verifies the authenticity of the site's contents. In case the site goes down, servers in the XRP Ledger's peer-to-peer network can directly relay the signed updates to the list among themselves. +By default, XRP Ledger servers are configured to use validator list sites run by the XRPL Foundation and Ripple. The sites provide a list of recommended validators (also known as a recommended _Unique Node List_, or UNL), which is updated periodically. Servers configured this way trust all validators in the latest version of the list, which ensures 100% overlap with others also using the same list. The default configuration includes public keys that verify the authenticity of the sites' contents. Servers in the XRP Ledger's peer-to-peer network also directly relay the signed updates to the list among themselves, reducing potential points of failure. -Technically, if you run a server, you can configure your own list site or explicitly choose validators to trust on an individual basis, but Ripple does not recommended doing so. If your chosen set of validators does not have enough overlap with others, your server may diverge from the rest of the network, and you could lose money by taking action based on your server's divergent state. +Technically, if you run a server, you can configure your own list site or explicitly choose validators to trust on an individual basis, but this is not recommended. If your chosen set of validators does not have enough overlap with others, your server may diverge from the rest of the network, and you could lose money by taking action based on your server's divergent state. Research is ongoing to design an improved consensus protocol that allows more heterogeneous validator lists. For more information, see the [Consensus Research](consensus-research.html) page. diff --git a/content/concepts/consensus-protocol/consensus.md b/content/concepts/consensus-protocol/index.md similarity index 100% rename from content/concepts/consensus-protocol/consensus.md rename to content/concepts/consensus-protocol/index.md diff --git a/content/concepts/index.md b/content/concepts/index.md new file mode 100644 index 0000000000..c62fa432be --- /dev/null +++ b/content/concepts/index.md @@ -0,0 +1,9 @@ +--- +html: concepts.html +parent: docs.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# Concepts + +Learn the "what" and "why" behind fundamental aspects of the XRP Ledger. \ No newline at end of file diff --git a/content/concepts/ledgers/ledgers.md b/content/concepts/ledgers/index.md similarity index 100% rename from content/concepts/ledgers/ledgers.md rename to content/concepts/ledgers/index.md diff --git a/content/concepts/networks-and-servers/amendments.md b/content/concepts/networks-and-servers/amendments.md index bd09e2880a..91a581a407 100644 --- a/content/concepts/networks-and-servers/amendments.md +++ b/content/concepts/networks-and-servers/amendments.md @@ -62,6 +62,9 @@ The voting configuration of a `rippled` server has no impact on it becoming amen You can unblock amendment blocked servers by upgrading to the newest version of `rippled`. +### Amendment Blocked Clio Servers + +The Clio server can become amendment blocked if it encounters an unknown field type while loading ledger data. This occurs if the field is newer than the `libxrpl` dependency that was used when building Clio. To unblock your Clio server, upgrade to a newer Clio release that was built with a compatible `libxrpl`. ## Retiring Amendments diff --git a/content/concepts/networks-and-servers/networks-and-servers.md b/content/concepts/networks-and-servers/index.md similarity index 100% rename from content/concepts/networks-and-servers/networks-and-servers.md rename to content/concepts/networks-and-servers/index.md diff --git a/content/concepts/networks-and-servers/ledger-history/ledger-history.md b/content/concepts/networks-and-servers/ledger-history.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/ledger-history.md rename to content/concepts/networks-and-servers/ledger-history.md diff --git a/content/concepts/networks-and-servers/parallel-networks.ja.md b/content/concepts/networks-and-servers/parallel-networks.ja.md deleted file mode 100644 index a25ab7388a..0000000000 --- a/content/concepts/networks-and-servers/parallel-networks.ja.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -html: parallel-networks.html -parent: networks-and-servers.html -blurb: テストネットワークおよび代替レジャーチェーンと本番環境のXRP Ledgerとの関係について説明します。 -labels: - - ブロックチェーン ---- -# 並列ネットワーク - -XRP Ledgerにはピアツーピアの本番環境のネットワークが1つ存在し、XRP Ledger上で行われるすべての取引はその本番環境のネットワーク、すなわちMainnet内で発生します。 - -また、Rippleでは、XRPLコミュニティーのメンバーがMainnet上にあるものに影響を及ぼすことなくXRPLテクノロジーとやり取りできるように、TestnetとDevnetの2つの代替ネットワーク(AltNet)を提供しています。3つすべてのネットワークの詳細を以下に示します。 - -| ネットワーク | アップグレード頻度 | 説明 | -|:--------|:----------------|:-------------------------------------------------| -| Mainnet | 安定版リリース | [XRP Ledger](xrp-ledger-overview.html)。ピアツーピアサーバーのネットワーク機能を備えた分散型の暗号台帳であり、[XRP](what-is-xrp.html)の土台となるものです。 | -| Testnet | 安定版リリース | XRP Ledger上に構築したソフトウェアのテスト環境として動作する「代替環境」のネットワーク。本番環境のXRP Ledgerユーザーに影響を及ぼすことも、本物の通貨をリスクにさらすこともありません。Testnetの[Amendmentのステータス](known-amendments.html)は、Mainnetを厳密に反映するようになっていますが、分散型システムが持つ予測不可能な性質により、タイミングにわずかな違いが生じることがあります。 | -| Devnet | ベータ版リリース | 次期リリースのプレビュー。XRP Ledgerのコアソフトウェアへの不安定な変更がテストされます。このAltNetを使用すると、開発者はまだMainnetで有効になっていないXRPLの計画段階の新機能やAmendmentを操作したり学習したりすることができます。 | - -TestnetとDevnetはそれぞれ独自にテスト用XRPを提供しています。このテスト用XRPは、XRP Ledgerの試用およびアプリケーション開発やインテグレーションに関心のある対象者に、Rippleが[無料で提供](xrp-testnet-faucet.html)するものです。テスト用XRPは、現実世界での価値はなく、ネットワークがリセットされると失われます。 - -**注意:** RippleはAltNetの安定性について一切保証しません。これらのネットワークは、サーバー構成、ネットワークトポロジー、ネットワークパフォーマンスのさまざまな特性をテストする目的でこれまで使用され、またこれからも同様に使用されます。 - - -## 並列ネットワークとコンセンサス - -使用するネットワークを定義する`rippled`の設定はありません。その代わり、信頼するバリデータのコンセンサスに基づいてどのレジャーを正しいレジャーとして受け入れるかを把握します。`rippled`インスタンスからなる異なるコンセンサスグループが、同じグループの他のメンバーだけを信頼する場合、各グループは引き続き並列ネットワークとして機能します。悪意のあるコンピューターや不適切に動作するコンピューターが両方のネットワークに接続している場合でも、各ネットワークのメンバーが、定数設定を超えて別のネットワークのメンバーを信頼するように設定されていない限り、コンセンサスプロセスに混乱は生じません。 - -Rippleでは、TestnetとDevnetでメインサーバーを運用しています。[独自の`rippled`サーバーをTestnetに接続](connect-your-rippled-to-the-xrp-test-net.html)していただくことも可能です。TestnetとDevnetでは、多様で検閲耐性のあるバリデータのセットが使用されていません。そのため、RippleはTestnetやDevnetを定期的にリセットできます。 - - -## 関連項目 - -- **ツール:** - - [XRP Testnet Faucet](xrp-test-net-faucet.html) -- **コンセプト:** - - [コンセンサスについて](consensus.html) - - [Amendment](amendments.html) -- **チュートリアル:** - - [XRP Testnetへの`rippled`の接続](connect-your-rippled-to-the-xrp-test-net.html) - - [スタンドアロンモードでのrippledの使用](use-stand-alone-mode.html) -- **リファレンス:** - - [Server_infoメソッド][] - - [Consensus_infoメソッド][] - - [Validator_list_sitesメソッド][] - - [Validatorsメソッド][] - - [デーモンモードのオプション](commandline-usage.html#デーモンモードのオプション) - - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/networks-and-servers/the-clio-server.md b/content/concepts/networks-and-servers/the-clio-server.md index 1f3854f1ec..b18427f8d3 100644 --- a/content/concepts/networks-and-servers/the-clio-server.md +++ b/content/concepts/networks-and-servers/the-clio-server.md @@ -36,6 +36,12 @@ A Clio server stores validated ledger data such as transaction metadata, account When a Clio server receives an API request, it looks up data from these data stores. For requests that require data from the P2P network, the Clio server forwards the request to a P2P server, and then passes the response back to the client. +Clio will **always** forward to `rippled` if any of the following is true: + +- `ledger_index` is set to `current` or `closed`. +- `accounts`, `queue` or `full` are set to `true` for the `ledger` API. +- `queue` is set to `true` for the `account_info` API. +- Requested API method (`"command"`) is `submit`, `submit_multisigned`, `fee`, `ledger_closed`, `ledger_current`, `ripple_path_find`, `manifest`, `channel_authorize` or `channel_verify`. ## See Also diff --git a/content/concepts/payment-types/escrow.ja.md b/content/concepts/payment-types/escrow.ja.md deleted file mode 100644 index 376f2ffca3..0000000000 --- a/content/concepts/payment-types/escrow.ja.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -html: escrow.html -parent: payment-types.html -blurb: XRPはEscrowに預託され、後日特定の条件が満たされた時点で送金されます。Escrowは時間制限、暗号条件、あるいはその両方によって異なる場合があります。 -labels: - - Escrow - - スマートコントラクト ---- -# Escrow - -Escrowは、XRP建ての条件付き送金決済を可能にするXRP Ledgerの機能です。 _Escrow_ と呼ばれるこの条件付き決済では、XRPはエスクローに預託され、後日特定の条件が満たされた時点で送金されます。Escrowを完了する条件には、時間ベースのロック解除や[Crypto-conditions][]などがあります。期限までに終了しなかった場合に期限切れとなるようにEscrowを設定することもできます。 - -エスクローに預託されているXRPはロックアップされます。Escrowが正常に終了またはキャンセルされるまでは、誰もXRPを使用または消却できません。有効期限前は、指定された受取人のみがXRPを受領できます。有効期限経過後は、XRPは送金元にのみ返金されます。 - -## 使用法 - - - -[![Escrowのフローチャート(正常終了)](img/escrow-success-flow.ja.png)](img/escrow-success-flow.ja.png) - -**ステップ1:** Escrowを送信するにあたり、送金元は[EscrowCreateトランザクション][]を使用していくらかのXRPをロックアップします。このトランザクションでは、終了時刻または有効期限、あるいはその両方が定義されます。また、このトランザクションでは、Escrow終了時に満たされるべきCrypto-conditionも定義できます。さらに、このトランザクションでは、XRPの指定受取人を定義する必要があります。受取人と送金元は同じでも _かまいません_ 。 - -**ステップ2:** このトランザクションの処理完了後に、エスクローに預託されたXRPを保持する[Escrowオブジェクト](escrow-object.html)がXRP Ledgerに作成されます。このオブジェクトには、オブジェクトを作成したトランザクションにより定義されたEscrowのプロパティーが含まれています。このEscrowに終了時刻が設定されている場合、この時刻まではXRPには誰もアクセスできません。 - -**ステップ3:** 受取人またはその他のXRP Ledgerアドレスが[EscrowFinishトランザクション][]を送信し、XRPが送金されます。正しい条件が満たされると、レジャーのEscrowオブジェクトは消却され、XRPが指定受取人に入金されます。EscrowにCrypto-conditionが指定されている場合、このトランザクションにはその条件に対するフルフィルメントが含まれている必要があります。Escrowの有効期限がすでに切れている場合、EscrowFinishトランザクションはコード[`tecNO_PERMISSION`](tec-codes.html)で失敗します。 - -### 有効期限切れの例 - -[![Escrowのフローチャート(期限切れEscrow)](img/escrow-cancel-flow.ja.png)](img/escrow-cancel-flow.ja.png) - -Escrowはすべて同じ方法で開始されるため、**ステップ1と2**は正常終了の例と同じです。 - -**ステップ3a:** Escrowに有効期限が設定されており、有効期限までにEscrowが正常に終了しなかった場合、Escrowは期限切れとみなされます。XRP Ledgerに引き続き残りますが、これ以降は正常に終了できなくなります。(期限切れオブジェクトは、トランザクションにより変更されるまでレジャーに残ります。時間ベースのトリガーではレジャーの内容は変更できません。) - -**ステップ4a:** 送金元またはその他のXRP Ledgerアドレスが、[EscrowCancelトランザクション][]を送信し、期限切れのEscrowをキャンセルします。これによりレジャーの[Escrowオブジェクト](escrow-object.html)が消却され、XRPは送金元に返金されます。 - -## 制約事項 - -Escrowは、XRP Ledgerを[Interledger Protocol][]やその他のスマートコントラクトで使用できるようにする機能として設計されています。現行バージョンでは、複雑にならないように範囲が適度に制限されています。 - -- EscrowはXRPでのみ実行でき、発行済み通貨では実行できません。 -- Escrowでは、少なくとも2つのトランザクション(Escrowを作成するトランザクションとEscrowを終了またはキャンセルするトランザクション)を送信する必要があります。したがって、参加者は2つのトランザクションの[トランザクションコスト](transaction-cost.html)を消却する必要があるため、ごく少額の決済にEscrowを使用することは合理的ではありません。 - - Crypto-conditionを使用する場合、[EscrowFinishトランザクションのコスト](#escrowfinishトランザクションのコスト)が通常よりも高くなります。 -- Escrowはすべて、「Finish-after」時刻または[Crypto-condition][]のいずれか、またはこの両方を使用して作成する必要があります。EscrowにFinish-after時刻が設定されていない場合は、有効期限が設定されている必要があります。 - - **注記:** [fix1571 Amendment][] でEscrowの作成要件が変更されました。このAmendmentよりも前に作成されたEscrowでは、条件やFinish-after時刻を指定せずに有効期限を指定できました。このようなEscrowは誰でも即時に終了できます(資金を指定受取人に送金します)。 - -- Escrowを作成するトランザクションの実行時には、時刻の値が過去の時間であってはなりません。 -- 時限リリースおよび有効期限は、XRP Ledgerクローズに制約されます。つまり実際には、レジャーの正確なクローズ時刻に基づいて、これらの時刻が約5秒単位で丸められる場合があります。 -- サポートされている唯一の[Crypto-condition][]タイプはPREIMAGE-SHA-256です。 - -Escrowは、少量の大口決済に適した大きな保証を提供しています。[Payment Channel](use-payment-channels.html)は、迅速な小口決済に適しています。もちろん、条件無しの[決済](payment.html)も多くのユースケースで好まれます。 - -## 状態遷移図 - -次の図は、Escrow実施時の各状態を示します。 - -[![Escrowの状態がHeld → Ready/Conditionally Ready → Expiredと遷移する様子を示す状態遷移図](img/escrow-states.ja.png)](img/escrow-states.ja.png) - -この図は、Escrowの「Finish-after」時刻(`FinishAfter`フィールド)、Crypto-condition(`Condition`フィールド)、および有効期限(`CancelAfter`フィールド)の3通りの組み合わせの3つの例を示します。 - -- **時間ベースのEscrow(左):** Finish-after時刻のみが設定されているEscrowは、**Held**状態で作成されます。指定の時刻が経過すると**Ready**になり、誰でもこのEscrowを終了できるようになります。Escrowに有効期限が設定されており、その時刻になるまでに誰もEscrowを終了しないと、そのEscrowは**Expired**になります。Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。Escrowに`CancelAfter`フィールドが設定されていない場合、Escrowが期限切れになることがないため、キャンセルできません。 - -- **コンビネーションEscrow(中央):** EscrowでCrypto-condition(`Condition`フィールド) _および_ 「Finish-after」時刻(`FinishAfter` フィールド)の両方が指定されている場合、Finish-after時刻が経過するまでEscrowは**Held**状態です。その後**Conditionally Ready**になり、Crypto-conditionに対し正しいフルフィルメントを提供すればEscrowを終了できます。Escrowに有効期限(`CancelAfter`フィールド)が設定されており、その時刻になるまでに誰もEscrowを終了しないと、そのEscrowは**Expired**になります。Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。Escrowに`CancelAfter`フィールドが設定されていない場合、Escrowが期限切れになることがないため、キャンセルできません。 - -- **条件付きEscrow(右):** EscrowでCrypto-condition(`Condition`フィールド)が指定されており、Finish-after時刻が指定されていない場合、Escrowは作成時点で即時に**Conditionally Ready**になります。この時点では、Crypto-conditionに対する正しいフルフィルメントを提供した人だけがEscrowを終了できます。有効期限(`CancelAfter`フィールド)までに終了されなかったEscrowは**Expired**になります。(Finish-after時刻が設定されていないEscrowには、有効期限が設定されている _必要があります_ 。)Expired状態では、Escrowを終了できなくなり、誰でもEscrowをキャンセルできるようになります。 - - - -## Escrowの利用可能性 - -条件付き決済は、2017-03-31以降XRP Ledgerコンセンサスプロトコルに対する[「Escrow」Amendment](known-amendments.html#escrow)により利用可能になりました。同機能の以前のバージョンは、2016年に「Suspended Payments」(SusPay)という名称で[XRP Ledger Testnet](xrp-testnet-faucet.html)で利用可能になりました。 - -[スタンドアロンモード](rippled-server-modes.html#スタンドアロンモード)でのテストの際には、Amendmentのステータスに関係なく、Escrow機能をローカルで強制的に有効にできます。次のスタンザを`rippled.cfg`に追加してください。 - - [features] - Escrow - -Escrow Amendmentのステータスは、[featureメソッド][]を使用して確認できます。 - -## EscrowFinishトランザクションのコスト - -[Crypto-condition][]を使用する場合、Crypto-conditionフルフィルメントの検証に高い処理負荷がかかるため、EscrowFinishトランザクションでは[高額なトランザクションコスト](transaction-cost.html#特別なトランザクションコスト)を支払う必要があります。 - -Escrowが時間のみによってロックされており、Crypto-conditionがない場合、EscrowFinishのコストは、リファレンストランザクションの標準[トランザクションコスト](transaction-cost.html)のみです。 - -必要となる追加のトランザクションコストは、フルフィルメントのサイズに比例します。現時点では、フルフィルメントのあるEscrowFinishでは最小トランザクションコストとして、**330 drop([XRPのdrop数](basic-data-types.html#通貨額の指定))と、フルフィルメントのサイズで16バイトあたり10 drop**が必要です。[マルチシグ](multi-signing.html)トランザクションの場合、マルチシグのコストがフルフィルメントのコストに加算されます。 - -**注記:** 上記の式は、トランザクションのリファレンスコストがXRPの10 dropであることを前提としています。 - -[手数料投票](fee-voting.html)により`reference_fee`の値が変更される場合、この式は新しいリファレンスコストに基づいてスケーリングされます。フルフィルメントのあるEscrowFinishトランザクションの公式は次のとおりです。 - -``` -reference_fee * (signer_count + 33 + (fulfillment_bytes / 16)) -``` - - -## Escrowを使用する理由 - -従来の[Escrow](https://en.wikipedia.org/wiki/Escrow)では、特にオンラインでリスクが高いと見なされる可能性のあるさまざまな金融取引を可能にしてきました。取引期間中または評価期間中に信頼できる第三者に資金を預託することで、相手側が当事者としての責任を必ず果たすことが両者に対し保証されます。 - -Escrow機能では、第三者をXRP Ledger に組み込まれている自動システムに置き換えることで、この概念をさらに発展させました。これにより、資金のロックアップとリリースが公平に行われ、自動化できるようになりました。 - -完全に自動化されたEscrowは、XRP Ledger 自体の整合性で裏付けられており、Rippleにとって重大な問題を解決します。Escrowで実現可能なユースケースは他にも多数あると思われます。Rippleは、Escrowのユニークな活用法を新たに編み出すように業界に働きかけています。 - -### ユースケース: 時間ベースのロックアップ - -**背景:** Rippleは大量のXRPを保有しており、XRP Ledgerと関連テクノロジーの健全な発展を促進し、資金を調達する目的でXRPを系統立てて売却しています。その一方、大量のXRPを保有しているために、Rippleでは次のような課題が生じています: - -- XRP Ledgerを使用する個人や企業は、Rippleが市場でXRPを通常よりも高値で売却して市場へ大量供給した場合に、XRPへの投資の希薄化や価値の低下を招く可能性があると懸念しています。 - - 市場への大量売却は長期的にはRippleに損失をもたらしますが、Rippleがそのような大量売却を行う可能性は、XRP価格への押し下げ圧力を促し、Rippleの資産価値を下げることになります。 -- Rippleは、内部関係者を含め、デジタル盗難やその他の悪意のある行為からアカウントを保護するため、アカウント所有権を慎重に管理しなければなりません。 - -**解決策:** Rippleは550億XRPを時間ベースのエスクローに預託することで、XRPの供給量を予測可能なものとし、その供給量がゆっくりですが安定したペースで増加していくようにしています。XRPを保有するその他の当事者は、Rippleの優先課題や戦略が変わったとしても、同社が市場へ大量供給できないとわかっています。 - -資金をEscrowに委託しても、Rippleの保有分が不正使用者から直接保護されるわけではありませんが、不正使用者が一時的にRippleのXRPアカウントを乗っ取っても、すぐに盗んだり流用したりできるXRPの量は大幅に減少します。これによりXRPの壊滅的な損失リスクは減少し、Rippleが自社のXRP資産の不正な流用を検出、防止、追跡する時間が増加します。 - -### ユースケース: インターレジャー決済 - -**背景:** 急速に成長しているフィンテック業界の主な課題の1つに、複数のデジタル通貨システムまたはレジャー間でのアクティビティーの調整があります。この課題に対して多くの解決策(XRP Ledgerの初期ビューを含む)が提案されていますが、これは「すべてを管理する1つのレジャー」の作成に絞り込むことができます。Rippleでは、1つのシステムでは世界中のすべての人々のニーズに応えることはできないと考えています。実際に、望ましい機能のいくつかは互いに矛盾しています。Rippleではその代わりに、レジャーを相互に接続するネットワーク、つまり _インターレジャー_ に、フィンテックの未来があると考えています。[Interledger Protocol][]は、できるだけ多くのシステムを安全かつスムーズに接続するための標準を定義します。 - -インターレジャー決済の根幹をなす基本原則は、 _条件付き送金_ です。マルチホップペイメントにはリスクの問題があります。中間のホップが増えるほど、決済が失敗する箇所が増えます。インターレジャーでは、この問題が金融版「[2相コミット](https://en.wikipedia.org/wiki/Two-phase_commit_protocol)」で解決されます。この2相コミットでの2つのステップとは、(1)条件付き送金の準備と(2)送金実行のための条件のフルフィルメントです。インターレジャープロジェクトでは、条件の定義と確認を自動化する方法を標準化するために[Crypto-condition][]仕様が定義され、このような条件の「共通の土台」としてSHA-256ハッシュが定められました。 - -**解決策:** Escrow機能により、XRP LedgerはInterledger Protocolを使用したマルチホップペイメントのブリッジングに理想的なレジャーとなりました。これは、Escrow機能がPREIMAGE-SHA-256 Crypto-conditionに基づいてXRPの送金をネイティブにサポートしており、一致するフルフィルメントの提示から数秒以内にこれらの送金が実行されるためです。 - - -## 参考情報 - -XRP LedgerのEscrowの詳細は、以下を参照してください: - -- [Escrowチュートリアル](use-escrows.html) - - [時間に基づくEscrowの送信](send-a-time-held-escrow.html) - - [条件に基づくEscrowの送信](send-a-conditionally-held-escrow.html) - - [送金元または受取人別のEscrow検索](look-up-escrows.html) -- [トランザクションのリファレンス](transaction-formats.html) - - [EscrowCreateトランザクション][] - - [EscrowFinishトランザクション][] - - [EscrowCancelトランザクション][] -- [レジャーリファレンス](ledger-data-formats.html) - - [Escrowオブジェクト](escrow-object.html) - -インターレジャーと、条件付き送金が実現する複数レジャー間での安全な決済についての詳細は、[Interledger Architecture](https://interledger.org/rfcs/0001-interledger-architecture/)を参照してください。 - -Rippleによる550億XRPのロックアップについては、[Ripple's Insights Blog](https://ripple.com/insights/ripple-to-place-55-billion-xrp-in-escrow-to-ensure-certainty-into-total-xrp-supply/)を参照してください。 - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/concepts/payment-types/index.md b/content/concepts/payment-types/index.md new file mode 100644 index 0000000000..88ae56b9c6 --- /dev/null +++ b/content/concepts/payment-types/index.md @@ -0,0 +1,9 @@ +--- +html: payment-types.html +parent: concepts.html +template: pagetype-category.html.jinja +blurb: The XRP Ledger supports point-to-point XRP payments alongside other, more specialized payment types. +--- +# Payment Types + +The XRP Ledger supports point-to-point XRP payments alongside other, more specialized payment types. \ No newline at end of file diff --git a/content/concepts/tokens/autobridging.md b/content/concepts/tokens/autobridging.md index 0a6c11aac9..5812022978 100644 --- a/content/concepts/tokens/autobridging.md +++ b/content/concepts/tokens/autobridging.md @@ -1,7 +1,7 @@ --- html: autobridging.html parent: decentralized-exchange.html -blurb: Autobriding automatically connects order books using XRP as an intermediary when it reduces costs. +blurb: Auto-bridging automatically connects order books using XRP as an intermediary when it reduces costs. labels: - XRP - Decentralized Exchange diff --git a/content/concepts/tokens/automated-market-makers.md b/content/concepts/tokens/automated-market-makers.md index c03e40cf62..ca5fdc7bed 100644 --- a/content/concepts/tokens/automated-market-makers.md +++ b/content/concepts/tokens/automated-market-makers.md @@ -34,6 +34,14 @@ The AMM also charges a percentage trading fee on top of the exchange rate. The XRP Ledger's implements a _geometric mean_ AMM with a weight parameter of 0.5, so it functions like a _constant product_ market maker. For a detailed explanation of the _constant product_ AMM formula and the economics of AMMs in general, see [Kris Machowski's Introduction to Automated Market Makers](https://www.machow.ski/posts/an_introduction_to_automated_market_makers/). +### Restrictions on Assets + +To prevent misuse, some restrictions apply to the assets used in an AMM. If you try to create an AMM with an asset that does not meet these restrictions, the transaction fails. The rules are as follows: + +- The asset must not be an LP Token from another AMM. +- If the asset is a token whose issuer uses [Authorized Trust Lines](authorized-trust-lines.html), the creator of the AMM must be authorized to hold those tokens. Only users whose trust lines are authorized can deposit that token into the AMM or withdraw it; however, users can still deposit or withdraw the other asset. +- If the [Clawback amendment][] :not_enabled: is enabled, the issuer of the token must not have enabled the ability to claw back their tokens. + ## LP Tokens @@ -43,7 +51,7 @@ For example, if you created an AMM with 5 ETH and 5 USD, and then someone exchan Anyone can deposit assets to an existing AMM. When they do, they receive new LP Tokens based on how much they deposited. The amount that a liquidity provider can withdraw from an AMM is based on the proportion of the AMM's LP Tokens they hold compared to the total number of LP Tokens outstanding. -LP Tokens are like other tokens in the XRP Ledger, so you can use them in many [types of payments](payment-types.html), trade them in the decentralized exchange, or even deposit them as assets for new AMMs. (To receive LP Tokens as payment, you must set up a [trust line](trust-lines-and-issuing.html) with a nonzero limit with the AMM Account as the issuer.) However, you can _only_ send LP Tokens directly to the AMM (redeeming them) using the [AMMWithdraw][] transaction type, not through other types of payments. Similarly, you can only send assets to the AMM's pool through the [AMMDeposit][] transaction type. +LP Tokens are like other tokens in the XRP Ledger, so you can use them in many [types of payments](payment-types.html) or trade them in the decentralized exchange. (To receive LP Tokens as payment, you must set up a [trust line](trust-lines-and-issuing.html) with a non-zero limit with the AMM Account as the issuer.) However, you can _only_ send LP Tokens directly to the AMM (redeeming them) using the [AMMWithdraw][] transaction type, not through other types of payments. Similarly, you can only send assets to the AMM's pool through the [AMMDeposit][] transaction type. The AMM is designed so that an AMM's asset pool is empty if and only if the AMM has no outstanding LP Tokens. This situation can only occur as the result of an [AMMWithdraw][] transaction; when it does, the AMM is automatically deleted. diff --git a/content/concepts/tokens/clawing-back-tokens.md b/content/concepts/tokens/clawing-back-tokens.md index 798e254073..95c9032df9 100644 --- a/content/concepts/tokens/clawing-back-tokens.md +++ b/content/concepts/tokens/clawing-back-tokens.md @@ -4,7 +4,6 @@ parent: tokens.html blurb: Issuers can claw back their tokens for compliance purposes if they enable the Clawback feature before issuing tokens. labels: - Tokens -status: not_enabled --- # Clawing Back Tokens diff --git a/content/concepts/transactions/about-canceling-a-transaction.md b/content/concepts/transactions/finality-of-results/canceling-a-transaction.md similarity index 100% rename from content/concepts/transactions/about-canceling-a-transaction.md rename to content/concepts/transactions/finality-of-results/canceling-a-transaction.md diff --git a/content/concepts/transactions/finality-of-results.md b/content/concepts/transactions/finality-of-results/index.md similarity index 100% rename from content/concepts/transactions/finality-of-results.md rename to content/concepts/transactions/finality-of-results/index.md diff --git a/content/concepts/transactions/look-up-transaction-results.md b/content/concepts/transactions/finality-of-results/look-up-transaction-results.md similarity index 100% rename from content/concepts/transactions/look-up-transaction-results.md rename to content/concepts/transactions/finality-of-results/look-up-transaction-results.md diff --git a/content/concepts/transactions/transaction-malleability.md b/content/concepts/transactions/finality-of-results/transaction-malleability.md similarity index 100% rename from content/concepts/transactions/transaction-malleability.md rename to content/concepts/transactions/finality-of-results/transaction-malleability.md diff --git a/content/concepts/transactions/transactions.md b/content/concepts/transactions/index.md similarity index 100% rename from content/concepts/transactions/transactions.md rename to content/concepts/transactions/index.md diff --git a/content/concepts/transactions/set-up-secure-signing.md b/content/concepts/transactions/secure-signing.md similarity index 100% rename from content/concepts/transactions/set-up-secure-signing.md rename to content/concepts/transactions/secure-signing.md diff --git a/content/contributing/report-a-scam.md b/content/contributing/report-a-scam.md index a153097ead..71df3b503c 100644 --- a/content/contributing/report-a-scam.md +++ b/content/contributing/report-a-scam.md @@ -3,6 +3,7 @@ html: report-a-scam.html parent: contribute.html --- # Report a Scam + In an evolving industry where trust and security are critical, scams continue to impede progress in crypto and blockchain. Individuals and teams across the XRP Ledger community, like the Xrplorer forensics team, help mitigate these scammers by providing free tools to report scams. ## Take Action @@ -12,7 +13,7 @@ If you think you've been scammed, make sure to collect as much information as yo 1. Submit the scammer's wallet address to [Xrplorer's forensics team](https://xrplorer.com/forensics/submit). - This helps to flag accounts used for illicit activity and include them in additional monitoring, auto-tracing, and warnings for other users, wallets, and exchanges. + This helps to flag accounts used for illicit activity and include them in additional monitoring, auto-tracing, and warnings for other users, wallets, and exchanges. 2. Report your case to your local law enforcement. If the scammer is caught, you may be able to get your money back. diff --git a/content/infrastructure/rippled/commandline-usage.md b/content/infrastructure/commandline-usage.md similarity index 100% rename from content/infrastructure/rippled/commandline-usage.md rename to content/infrastructure/commandline-usage.md diff --git a/content/infrastructure/rippled/configuration/configure-amendment-voting.md b/content/infrastructure/configuration/configure-amendment-voting.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-amendment-voting.md rename to content/infrastructure/configuration/configure-amendment-voting.md diff --git a/content/infrastructure/rippled/configuration/configure-grpc.md b/content/infrastructure/configuration/configure-grpc.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-grpc.md rename to content/infrastructure/configuration/configure-grpc.md diff --git a/content/infrastructure/rippled/configuration/configure-statsd.md b/content/infrastructure/configuration/configure-statsd.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-statsd.md rename to content/infrastructure/configuration/configure-statsd.md diff --git a/content/infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.md b/content/infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md similarity index 100% rename from content/infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.md rename to content/infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md diff --git a/content/infrastructure/rippled/configuration/configure-advisory-deletion.md b/content/infrastructure/configuration/data-retention/configure-advisory-deletion.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-advisory-deletion.md rename to content/infrastructure/configuration/data-retention/configure-advisory-deletion.md diff --git a/content/infrastructure/rippled/configuration/configure-full-history.md b/content/infrastructure/configuration/data-retention/configure-full-history.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-full-history.md rename to content/infrastructure/configuration/data-retention/configure-full-history.md diff --git a/content/infrastructure/rippled/configuration/configure-history-sharding.md b/content/infrastructure/configuration/data-retention/configure-history-sharding.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-history-sharding.md rename to content/infrastructure/configuration/data-retention/configure-history-sharding.md diff --git a/content/infrastructure/rippled/configuration/configure-online-deletion.md b/content/infrastructure/configuration/data-retention/configure-online-deletion.md similarity index 100% rename from content/infrastructure/rippled/configuration/configure-online-deletion.md rename to content/infrastructure/configuration/data-retention/configure-online-deletion.md diff --git a/content/concepts/networks-and-servers/ledger-history/history-sharding.md b/content/infrastructure/configuration/data-retention/history-sharding.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/history-sharding.md rename to content/infrastructure/configuration/data-retention/history-sharding.md diff --git a/content/infrastructure/configuration/data-retention/index.md b/content/infrastructure/configuration/data-retention/index.md new file mode 100644 index 0000000000..103cf6d772 --- /dev/null +++ b/content/infrastructure/configuration/data-retention/index.md @@ -0,0 +1,9 @@ +--- +html: data-retention.html +parent: configure-rippled.html +template: pagetype-category.html.jinja +blurb: Control how much data your server should keep and when it should remove old data. +--- +# Data Retention + +Control how much data your server should keep and when it should remove old data, including old versions of the ledger state and past transactions. \ No newline at end of file diff --git a/content/concepts/networks-and-servers/ledger-history/online-deletion.md b/content/infrastructure/configuration/data-retention/online-deletion.md similarity index 100% rename from content/concepts/networks-and-servers/ledger-history/online-deletion.md rename to content/infrastructure/configuration/data-retention/online-deletion.md diff --git a/content/infrastructure/rippled/configuration/enable-public-signing.md b/content/infrastructure/configuration/enable-public-signing.md similarity index 100% rename from content/infrastructure/rippled/configuration/enable-public-signing.md rename to content/infrastructure/configuration/enable-public-signing.md diff --git a/content/infrastructure/configuration/index.md b/content/infrastructure/configuration/index.md new file mode 100644 index 0000000000..181302690e --- /dev/null +++ b/content/infrastructure/configuration/index.md @@ -0,0 +1,9 @@ +--- +html: configure-rippled.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: Customize the configuration of an XRP Ledger server. +--- +# Configuration + +Customize the configuration of an XRP Ledger server. \ No newline at end of file diff --git a/content/infrastructure/rippled/configure-peering/cluster-rippled-servers.md b/content/infrastructure/configuration/peering/cluster-rippled-servers.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/cluster-rippled-servers.md rename to content/infrastructure/configuration/peering/cluster-rippled-servers.md diff --git a/content/infrastructure/rippled/configure-peering/configure-a-private-server.md b/content/infrastructure/configuration/peering/configure-a-private-server.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/configure-a-private-server.md rename to content/infrastructure/configuration/peering/configure-a-private-server.md diff --git a/content/infrastructure/rippled/configure-peering/configure-the-peer-crawler.md b/content/infrastructure/configuration/peering/configure-the-peer-crawler.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/configure-the-peer-crawler.md rename to content/infrastructure/configuration/peering/configure-the-peer-crawler.md diff --git a/content/infrastructure/rippled/configure-peering/enable-link-compression.md b/content/infrastructure/configuration/peering/enable-link-compression.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/enable-link-compression.md rename to content/infrastructure/configuration/peering/enable-link-compression.md diff --git a/content/infrastructure/rippled/configure-peering/forward-ports-for-peering.md b/content/infrastructure/configuration/peering/forward-ports-for-peering.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/forward-ports-for-peering.md rename to content/infrastructure/configuration/peering/forward-ports-for-peering.md diff --git a/content/infrastructure/rippled/configure-peering/configure-peering.md b/content/infrastructure/configuration/peering/index.md similarity index 96% rename from content/infrastructure/rippled/configure-peering/configure-peering.md rename to content/infrastructure/configuration/peering/index.md index 1d614ff0a1..dea021d96c 100644 --- a/content/infrastructure/rippled/configure-peering/configure-peering.md +++ b/content/infrastructure/configuration/peering/index.md @@ -1,7 +1,7 @@ --- html: configure-peering.html name: Peering -parent: infrastructure.html +parent: configure-rippled.html template: pagetype-category.html.jinja blurb: Configure how your server connects to the peer-to-peer network. labels: diff --git a/content/infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.md b/content/infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.md rename to content/infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md diff --git a/content/infrastructure/rippled/configure-peering/set-max-number-of-peers.md b/content/infrastructure/configuration/peering/set-max-number-of-peers.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/set-max-number-of-peers.md rename to content/infrastructure/configuration/peering/set-max-number-of-peers.md diff --git a/content/infrastructure/rippled/configure-peering/use-a-peer-reservation.md b/content/infrastructure/configuration/peering/use-a-peer-reservation.md similarity index 100% rename from content/infrastructure/rippled/configure-peering/use-a-peer-reservation.md rename to content/infrastructure/configuration/peering/use-a-peer-reservation.md diff --git a/content/infrastructure/configuration/server-modes/index.md b/content/infrastructure/configuration/server-modes/index.md new file mode 100644 index 0000000000..57d03d2921 --- /dev/null +++ b/content/infrastructure/configuration/server-modes/index.md @@ -0,0 +1,9 @@ +--- +html: server-modes.html +parent: configure-rippled.html +template: pagetype-category.html.jinja +blurb: Information on how to run a core server in different modes specialized for different purposes. +--- +# Server Modes + +The core XRP Ledger server can run in different modes specialized for different purposes. \ No newline at end of file diff --git a/content/infrastructure/rippled/configuration/run-rippled-as-a-stock-server.md b/content/infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md similarity index 100% rename from content/infrastructure/rippled/configuration/run-rippled-as-a-stock-server.md rename to content/infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md diff --git a/content/infrastructure/rippled/configuration/run-rippled-as-a-validator.md b/content/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md similarity index 100% rename from content/infrastructure/rippled/configuration/run-rippled-as-a-validator.md rename to content/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md diff --git a/content/infrastructure/index.md b/content/infrastructure/index.md new file mode 100644 index 0000000000..e4bf13db71 --- /dev/null +++ b/content/infrastructure/index.md @@ -0,0 +1,9 @@ +--- +html: infrastructure.html +parent: docs.html +template: pagetype-category.html.jinja +top_nav_grouping: Article Types +--- +# Infrastructure + +Install, configure, and manage the software that powers the XRP Ledger. \ No newline at end of file diff --git a/content/infrastructure/installation/build-on-linux-mac-windows.md b/content/infrastructure/installation/build-on-linux-mac-windows.md new file mode 100644 index 0000000000..85a6e11721 --- /dev/null +++ b/content/infrastructure/installation/build-on-linux-mac-windows.md @@ -0,0 +1,19 @@ +--- +html: build-on-linux-mac-windows.html +parent: install-rippled.html +blurb: Build rippled on Linux, Mac (macOS), or Windows +labels: + - Core Server + - Blockchain +top_nav_grouping: Popular Pages +--- +# Build rippled on Linux, Mac, or Windows + +Building `rippled` across various platforms such as Windows, Linux, or macOS requires a C++ development environment. You will need tools like Git, Python, Conan, CMake, and a suitable C++ compiler. + +To continue, proceed to [the latest `rippled` build instructions on GitHub](https://github.com/XRPLF/rippled/blob/develop/BUILD.md). + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/infrastructure/rippled/installation/build-run-rippled-in-reporting-mode.md b/content/infrastructure/installation/build-run-rippled-in-reporting-mode.md similarity index 100% rename from content/infrastructure/rippled/installation/build-run-rippled-in-reporting-mode.md rename to content/infrastructure/installation/build-run-rippled-in-reporting-mode.md diff --git a/content/infrastructure/rippled/installation/capacity-planning.md b/content/infrastructure/installation/capacity-planning.md similarity index 100% rename from content/infrastructure/rippled/installation/capacity-planning.md rename to content/infrastructure/installation/capacity-planning.md diff --git a/content/infrastructure/installation/index.md b/content/infrastructure/installation/index.md new file mode 100644 index 0000000000..d0a1f12b23 --- /dev/null +++ b/content/infrastructure/installation/index.md @@ -0,0 +1,10 @@ +--- +html: install-rippled.html +parent: infrastructure.html +top_nav_name: Install & Configure +template: pagetype-category.html.jinja +blurb: Install and update XRP Ledger servers including the core server, rippled, and API server, Clio. +--- +# Installation + +Install and update XRP Ledger servers including the core server, rippled, and API server, Clio. \ No newline at end of file diff --git a/content/infrastructure/clio/install-clio-on-ubuntu.md b/content/infrastructure/installation/install-clio-on-ubuntu.md similarity index 99% rename from content/infrastructure/clio/install-clio-on-ubuntu.md rename to content/infrastructure/installation/install-clio-on-ubuntu.md index afe597295d..38b48e5811 100644 --- a/content/infrastructure/clio/install-clio-on-ubuntu.md +++ b/content/infrastructure/installation/install-clio-on-ubuntu.md @@ -1,6 +1,6 @@ --- html: install-clio-on-ubuntu.html -parent: infrastructure.html +parent: install-rippled.html blurb: Install a precompiled Clio binary on Ubuntu Linux. labels: - Clio Server diff --git a/content/infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.md b/content/infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md similarity index 100% rename from content/infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.md rename to content/infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md diff --git a/content/infrastructure/rippled/installation/install-rippled-on-ubuntu.md b/content/infrastructure/installation/install-rippled-on-ubuntu.md similarity index 94% rename from content/infrastructure/rippled/installation/install-rippled-on-ubuntu.md rename to content/infrastructure/installation/install-rippled-on-ubuntu.md index dbd9061a35..f13b9a8c05 100644 --- a/content/infrastructure/rippled/installation/install-rippled-on-ubuntu.md +++ b/content/infrastructure/installation/install-rippled-on-ubuntu.md @@ -48,7 +48,7 @@ Before you install `rippled`, you must meet the [System Requirements](system-req In particular, make sure that the fingerprint matches. (In the above example, the fingerprint is on the second line, starting with `C001`.) -4. Add the appropriate Ripple repository for your operating system version: +5. Add the appropriate Ripple repository for your operating system version: echo "deb [signed-by=/usr/local/share/keyrings/ripple-key.gpg] https://repos.ripple.com/repos/rippled-deb focal stable" | \ sudo tee -a /etc/apt/sources.list.d/ripple.list @@ -67,15 +67,15 @@ Before you install `rippled`, you must meet the [System Requirements](system-req **Warning:** Unstable and nightly builds may be broken at any time. Do not use these builds for production servers. -5. Fetch the Ripple repository. +6. Fetch the Ripple repository. sudo apt -y update -6. Install the `rippled` software package: +7. Install the `rippled` software package: sudo apt -y install rippled -7. Check the status of the `rippled` service: +8. Check the status of the `rippled` service: systemctl status rippled.service @@ -84,7 +84,7 @@ Before you install `rippled`, you must meet the [System Requirements](system-req sudo systemctl start rippled.service -8. Optional: allow `rippled` to bind to privileged ports. +9. Optional: allow `rippled` to bind to privileged ports. This allows you to serve incoming API requests on port 80 or 443. (If you want to do so, you must also update the config file's port settings.) diff --git a/content/infrastructure/rippled/installation/rippled-1-3-migration-instructions.md b/content/infrastructure/installation/rippled-1-3-migration-instructions.md similarity index 100% rename from content/infrastructure/rippled/installation/rippled-1-3-migration-instructions.md rename to content/infrastructure/installation/rippled-1-3-migration-instructions.md diff --git a/content/infrastructure/rippled/installation/system-requirements.md b/content/infrastructure/installation/system-requirements.md similarity index 86% rename from content/infrastructure/rippled/installation/system-requirements.md rename to content/infrastructure/installation/system-requirements.md index ac7b03c6bf..bd069a999a 100644 --- a/content/infrastructure/rippled/installation/system-requirements.md +++ b/content/infrastructure/installation/system-requirements.md @@ -17,10 +17,13 @@ For reliable performance in production environments, it is recommended to run an - RAM: 64 GB. - Network: Enterprise data center network with a gigabit network interface on the host. +For a validator in AWS, consider `z1d.2xlarge` with an extra 1 TB disk for logging and core dump storage. ## Minimum Specifications -For testing purposes or occasional use, you can run an XRP Ledger server on commodity hardware. The following minimum requirements should work for most cases, but may not always [stay synced with the network](server-doesnt-sync.html): +**Caution:** These specifications are not enough to reliably [stay synced with Mainnet](server-doesnt-sync.html). For production use, follow the recommended specifications above. + +For testing purposes, you can run an XRP Ledger server on commodity hardware with the following minimum requirements: - Operating System: macOS, Windows (64-bit), or most Linux distributions (Red Hat, Ubuntu, and Debian supported). - CPU: 64-bit x86_64, 4+ cores. @@ -31,8 +34,6 @@ For testing purposes or occasional use, you can run an XRP Ledger server on comm Amazon EC2's `i3.2xlarge` VM size may be appropriate depending on your workload. A fast network connection is preferable. Any increase in a server's client-handling load increases resources needs. -For a validator, consider `z1d.2xlarge` with an extra 1 TB disk for logging and core dump storage. - ## System Time diff --git a/content/infrastructure/rippled/installation/update-rippled-automatically-on-linux.md b/content/infrastructure/installation/update-rippled-automatically-on-linux.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-automatically-on-linux.md rename to content/infrastructure/installation/update-rippled-automatically-on-linux.md diff --git a/content/infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.md b/content/infrastructure/installation/update-rippled-manually-on-centos-rhel.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.md rename to content/infrastructure/installation/update-rippled-manually-on-centos-rhel.md diff --git a/content/infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.md b/content/infrastructure/installation/update-rippled-manually-on-ubuntu.md similarity index 100% rename from content/infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.md rename to content/infrastructure/installation/update-rippled-manually-on-ubuntu.md diff --git a/content/infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.md b/content/infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md similarity index 100% rename from content/infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.md rename to content/infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md diff --git a/content/infrastructure/testing-and-auditing/index.md b/content/infrastructure/testing-and-auditing/index.md new file mode 100644 index 0000000000..580db407b1 --- /dev/null +++ b/content/infrastructure/testing-and-auditing/index.md @@ -0,0 +1,9 @@ +--- +html: use-stand-alone-mode.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: For new features and experiments, you can use Stand-Alone Mode to test features with a full network. +--- +# Testing and Auditing + +For new features and experiments, you can use Stand-Alone Mode to test features with a full network. \ No newline at end of file diff --git a/content/infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.md b/content/infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md similarity index 100% rename from content/infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.md rename to content/infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md diff --git a/content/infrastructure/rippled/run-private-network-with-docker.md b/content/infrastructure/testing-and-auditing/run-private-network-with-docker.md similarity index 99% rename from content/infrastructure/rippled/run-private-network-with-docker.md rename to content/infrastructure/testing-and-auditing/run-private-network-with-docker.md index 85b478ada7..70bc4e7f44 100644 --- a/content/infrastructure/rippled/run-private-network-with-docker.md +++ b/content/infrastructure/testing-and-auditing/run-private-network-with-docker.md @@ -1,7 +1,7 @@ --- html: private-network-with-docker.html name: Run a Private Network with Docker -parent: infrastructure.html +parent: use-stand-alone-mode.html blurb: Learn how to set up your own XRP private ledger network with Docker and Docker Compose. labels: - Core Server diff --git a/content/infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.md b/content/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md similarity index 100% rename from content/infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.md rename to content/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md diff --git a/content/infrastructure/rippled/configuration/test-amendments.md b/content/infrastructure/testing-and-auditing/test-amendments.md similarity index 88% rename from content/infrastructure/rippled/configuration/test-amendments.md rename to content/infrastructure/testing-and-auditing/test-amendments.md index 86b4d31fe2..e0d8d28520 100644 --- a/content/infrastructure/rippled/configuration/test-amendments.md +++ b/content/infrastructure/testing-and-auditing/test-amendments.md @@ -1,6 +1,6 @@ --- html: test-amendments.html -parent: configure-rippled.html +parent: use-stand-alone-mode.html # "Testing and Auditing" blurb: You can test proposed amendments before they're enabled on the network. labels: - Blockchain diff --git a/content/infrastructure/rippled/troubleshooting/diagnosing-problems.md b/content/infrastructure/troubleshooting/diagnosing-problems.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/diagnosing-problems.md rename to content/infrastructure/troubleshooting/diagnosing-problems.md diff --git a/content/infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.md b/content/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.md rename to content/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md diff --git a/content/infrastructure/rippled/troubleshooting/health-check-interventions.md b/content/infrastructure/troubleshooting/health-check-interventions.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/health-check-interventions.md rename to content/infrastructure/troubleshooting/health-check-interventions.md diff --git a/content/infrastructure/troubleshooting/index.md b/content/infrastructure/troubleshooting/index.md new file mode 100644 index 0000000000..7e9febd22d --- /dev/null +++ b/content/infrastructure/troubleshooting/index.md @@ -0,0 +1,9 @@ +--- +html: troubleshoot-the-rippled-server.html +parent: infrastructure.html +template: pagetype-category.html.jinja +blurb: Troubleshoot all kinds of problems with the rippled server. +--- +# Troubleshooting + +Troubleshoot all kinds of problems with the rippled server. \ No newline at end of file diff --git a/content/infrastructure/rippled/troubleshooting/server-doesnt-sync.md b/content/infrastructure/troubleshooting/server-doesnt-sync.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/server-doesnt-sync.md rename to content/infrastructure/troubleshooting/server-doesnt-sync.md diff --git a/content/infrastructure/rippled/troubleshooting/server-is-amendment-blocked.md b/content/infrastructure/troubleshooting/server-is-amendment-blocked.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/server-is-amendment-blocked.md rename to content/infrastructure/troubleshooting/server-is-amendment-blocked.md diff --git a/content/infrastructure/rippled/troubleshooting/server-wont-start.md b/content/infrastructure/troubleshooting/server-wont-start.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/server-wont-start.md rename to content/infrastructure/troubleshooting/server-wont-start.md diff --git a/content/infrastructure/rippled/troubleshooting/understanding-log-messages.md b/content/infrastructure/troubleshooting/understanding-log-messages.md similarity index 100% rename from content/infrastructure/rippled/troubleshooting/understanding-log-messages.md rename to content/infrastructure/troubleshooting/understanding-log-messages.md diff --git a/content/concepts/introduction/crypto-wallets.md b/content/introduction/crypto-wallets.md similarity index 100% rename from content/concepts/introduction/crypto-wallets.md rename to content/introduction/crypto-wallets.md diff --git a/content/introduction/index.md b/content/introduction/index.md new file mode 100644 index 0000000000..ed29f9d21a --- /dev/null +++ b/content/introduction/index.md @@ -0,0 +1,9 @@ +--- +html: introduction.html +parent: docs.html +template: pagetype-category.html.jinja +top_nav_grouping: Article Types +--- +# Introduction + +This is a quick introduction to the principal features of the XRP Ledger (XRPL). Read this to get a high level understanding of the XRPL, then you can read more about areas of particular interest. The XRP Ledger is a blockchain that permanently records digital transactions of tokens between accounts. The sections below expand on the concepts introduced in that sentence. \ No newline at end of file diff --git a/content/concepts/introduction/software-ecosystem.md b/content/introduction/software-ecosystem.md similarity index 100% rename from content/concepts/introduction/software-ecosystem.md rename to content/introduction/software-ecosystem.md diff --git a/content/concepts/introduction/txn-and-requests.md b/content/introduction/transactions-and-requests.md similarity index 100% rename from content/concepts/introduction/txn-and-requests.md rename to content/introduction/transactions-and-requests.md diff --git a/content/concepts/introduction/what-is-the-xrp-ledger.md b/content/introduction/what-is-the-xrp-ledger.md similarity index 100% rename from content/concepts/introduction/what-is-the-xrp-ledger.md rename to content/introduction/what-is-the-xrp-ledger.md diff --git a/content/concepts/introduction/what-is-xrp.md b/content/introduction/what-is-xrp.md similarity index 100% rename from content/concepts/introduction/what-is-xrp.md rename to content/introduction/what-is-xrp.md diff --git a/content/references/client-libraries.md b/content/references/client-libraries.md index 2248f31fb2..27cb62b5d7 100644 --- a/content/references/client-libraries.md +++ b/content/references/client-libraries.md @@ -16,5 +16,3 @@ For other programming languages, you can access the XRP Ledger through the [HTTP | **C++** | `rippled` Signing Library | [Get Started](https://github.com/XRPLF/rippled/tree/develop/Builds/linux#signing-library) | | (Part of [`rippled`](https://github.com/XRPLF/rippled/)) | | **Java** | `xrpl4j` | [Get Started Using Java](get-started-using-java.html) | [API Reference](https://javadoc.io/doc/org.xrpl/) | [Repo](https://github.com/XRPLF/xrpl4j) | | **PHP** | `XRPL_PHP` | [Get Started Using PHP](get-started-using-php.html) | [XRPL_PHP Docs](https://alexanderbuzz.github.io/xrpl-php-docs/) | [Repo](https://github.com/AlexanderBuzz/xrpl-php) | - -**Tip:** To add a client library not listed here, please [suggest changes to this page]({{target.github_forkurl}}/edit/{{target.github_branch}}/content/{{currentpage.md}})! diff --git a/content/references/data-api.ja.md b/content/references/data-api.ja.md deleted file mode 100644 index de5aaf3400..0000000000 --- a/content/references/data-api.ja.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -html: data-api.html -parent: references.html -blurb: XRP Ledger分析と履歴データに対するRESTfulインターフェイスです。 -status: removed -nav_omit: true ---- -# Ripple Data API v2 - -**警告:** Ripple Data API v2は廃止されました。代わりに[HTTP / WebSocket API](http-websocket-apis.html)を使って下さい。 - -Ripple Data API v2を使用すると、XRP Ledgerの変更に関する情報(トランザクション履歴や処理済みの分析データなど)にアクセスできます。このような情報は専用データベースに保管されるので、`rippled`サーバーで保持する必要のある履歴レジャーバージョンの数が少なくなります。Data API v2は[XRP Charts](https://xrpcharts.ripple.com/)や[ripple.com](https://www.ripple.com)などのアプリケーションのデータソースとしても機能します。 - -廃止されましたRipple Data APIについては[rippled-historical-database レポジトリー](https://github.com/ripple/rippled-historical-database)をご覧下さい. diff --git a/content/references/data-api.md b/content/references/data-api.md index c2df1fa1e4..cd1511903a 100644 --- a/content/references/data-api.md +++ b/content/references/data-api.md @@ -16,5 +16,3 @@ For information on the old Data API, see the [rippled-historical-database reposi For most common operations, like requesting account balances or transaction history, you can query a self-hosted or [public XRP Ledger server](public-servers.html) using a [WebSocket connection](get-started-using-http-websocket-apis.html#websocket-api) or [JSON-RPC (HTTP POST)](get-started-using-http-websocket-apis.html#json-rpc). See the [Get Started Using HTTP / WebSocket APIs](get-started-using-http-websocket-apis.html) page for more information. - -[The XRP Intel API](https://xrpintel.com/api) run by Dev Null Productions provides many of the same data which the Ripple Data API v2 used to, including account, gateways, and more; derived directly from the XRP Ledger. diff --git a/content/references/http-websocket-apis/admin-api-methods/admin-api-methods.md b/content/references/http-websocket-apis/admin-api-methods/index.md similarity index 100% rename from content/references/http-websocket-apis/admin-api-methods/admin-api-methods.md rename to content/references/http-websocket-apis/admin-api-methods/index.md diff --git a/content/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md new file mode 100644 index 0000000000..20734bb92f --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md @@ -0,0 +1,8 @@ +--- +html: key-generation-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Key Generation Methods + +Use these methods to generate and manage keys. \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md new file mode 100644 index 0000000000..ef63931af6 --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md @@ -0,0 +1,8 @@ +--- +html: logging-and-data-management-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Logging and Data Management Methods + +Use these methods to manage log levels and other data, such as ledgers. \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md new file mode 100644 index 0000000000..c1d6665db4 --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md @@ -0,0 +1,8 @@ +--- +html: peer-management-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Peer Management Methods + +Use these methods to manage your server's peer-to-peer connections. \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md new file mode 100644 index 0000000000..6b506cab1d --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md @@ -0,0 +1,8 @@ +--- +html: server-control-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Server Control Methods + +Use these methods to manage the rippled server. \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md b/content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md index bebf83b1bd..559ed7523d 100644 --- a/content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md +++ b/content/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md @@ -7,6 +7,7 @@ labels: - Core Server --- # validation_seed + [[Source]](https://github.com/XRPLF/rippled/blob/a61ffab3f9010d8accfaa98aa3cacc7d38e74121/src/ripple/rpc/handlers/ValidationSeed.cpp "Source") The `validation_seed` command temporarily sets the secret value that rippled uses to sign validations. This value resets based on the config file when you restart the server. [Disabled since: rippled 0.29.1](https://github.com/XRPLF/rippled/releases/tag/0.29.1-rc1 "BADGE_RED") diff --git a/content/references/http-websocket-apis/admin-api-methods/signing-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/signing-methods/index.md new file mode 100644 index 0000000000..a05d144c9d --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/signing-methods/index.md @@ -0,0 +1,8 @@ +--- +html: signing-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Signing Methods + +Use these methods to work with transactions. \ No newline at end of file diff --git a/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md b/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md new file mode 100644 index 0000000000..00330a40a2 --- /dev/null +++ b/content/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md @@ -0,0 +1,8 @@ +--- +html: status-and-debugging-methods.html +parent: admin-api-methods.html +template: pagetype-category.html.jinja +--- +# Status and Debugging Methods + +Use these methods to check the status of the network and server. \ No newline at end of file diff --git a/content/references/http-websocket-apis/api-conventions/ctid.md b/content/references/http-websocket-apis/api-conventions/ctid.md new file mode 100644 index 0000000000..43409d1706 --- /dev/null +++ b/content/references/http-websocket-apis/api-conventions/ctid.md @@ -0,0 +1,32 @@ +--- +html: ctid.html +parent: api-conventions.html +blurb: A Compact Transaction Identifier (CTID) is a short string that uniquely identifies a validated transaction across any chain. +labels: + - Development +--- +# Compact Transaction Identifier + +A Compact Transaction Identifier (CTID) is a unique identifier for a validated transaction that applies across any [network](parallel-networks.html), not just the XRP Ledger Mainnet. + +The differences between a CTID and a transaction's [identifying hash](transactions.html#identifying-transactions) are as follows: + +- A CTID identifies a validated transaction based on its network ID, ledger index, and position within the ledger. Since it specifies which network a transaction has been validated on, it can be used in contexts where you are interacting with more than one network, such as connecting to sidechains. A CTID is 64 bits, typically written as 16 characters of uppercase hexadecimal starting with `C`, for example `C005523E00000000`. +- An transaction's identifying hash identifies a signed transaction based on its contents, regardless of if that transaction has been validated on any chains. Since it's a cryptographic hash, it can also be used to prove that the transaction contents are intact. A transaction hash is 256 bits, typically written as 64 characters of hexadecimal, for example `E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7`. + +**Caution:** Do not try to use a CTID for a transaction that has not yet been validated. The canonical order of the transaction can change between when the transaction is initially applied and when it is validated by the consensus process, resulting in a CTID that identifies a different transaction or no transaction at all. + +## Structure + +A CTID contains the following parts, in order (big-endian): + +1. 4 bits: The hex nibble `C` indicating that this is a CTID. +2. 28 bits: The ledger index of the ledger where the transaction was validated. +3. 16 bits: The transaction index, its place within the ledger's canonical order. This is provided as the field `TransactionIndex` in [transaction metadata](transaction-metadata.html). +4. 16 bits: The [network ID](transaction-common-fields.html#networkid-field) of the network that validated this transaction. + +**Note:** The ledger index is normally stored as a 32-bit unsigned integer which increases by 1 each time a new ledger is created. If a network's ledger index is greater than 268,435,455, it won't fit in 28 bits, so the leading `C` should be incremented to `D`, `E`, or `F` as necessary. This is not expected to be necessary until at least the year 2043. + +## See Also + +For more information including sample code and background, see the [XLS-37d Standard](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0037d-concise-transaction-identifier-ctid). diff --git a/content/references/http-websocket-apis/api-conventions/api-conventions.md b/content/references/http-websocket-apis/api-conventions/index.md similarity index 100% rename from content/references/http-websocket-apis/api-conventions/api-conventions.md rename to content/references/http-websocket-apis/api-conventions/index.md diff --git a/content/references/http-websocket-apis/index.md b/content/references/http-websocket-apis/index.md new file mode 100644 index 0000000000..b9be14e1ca --- /dev/null +++ b/content/references/http-websocket-apis/index.md @@ -0,0 +1,8 @@ +--- +html: http-websocket-apis.html +parent: references.html +template: pagetype-category.html.jinja +--- +# HTTP / WebSocket APIs + +Communicate directly with rippled, the core peer-to-peer server that manages the XRP Ledger. \ No newline at end of file diff --git a/content/references/http-websocket-apis/peer-port-methods/index.md b/content/references/http-websocket-apis/peer-port-methods/index.md new file mode 100644 index 0000000000..b5701ffea3 --- /dev/null +++ b/content/references/http-websocket-apis/peer-port-methods/index.md @@ -0,0 +1,11 @@ +--- +html: peer-port-methods.html +parent: http-websocket-apis.html +template: pagetype-category.html.jinja +blurb: Special API methods for sharing network topology and status metrics, served on the XRPL Peer Protocol port. +--- +# Peer Port Methods + +Separate from the [WebSocket / HTTP APIs](http-websocket-apis.html), `rippled` servers provide a few special API methods from the same port they use for XRP Ledger [peer protocol](peer-protocol.html) communications. These methods provide status information about the server itself and its connectivity to the peer-to-peer network, and are intended mainly for monitoring and administration. + +**Security:** Most `rippled` servers use a self-signed TLS certificate to respond to peer port requests. By default, most tools (including web browsers) flag or block such responses for being untrusted. You must ignore the certificate checking (for example, if using cURL, add the `--insecure` flag) to display a response from those servers, or configure the server with a TLS certificate signed by a known Certificate Authority. \ No newline at end of file diff --git a/content/references/http-websocket-apis/peer-port-methods/validator-list.md b/content/references/http-websocket-apis/peer-port-methods/validator-list.md index 575e7fe330..fee082b6ff 100644 --- a/content/references/http-websocket-apis/peer-port-methods/validator-list.md +++ b/content/references/http-websocket-apis/peer-port-methods/validator-list.md @@ -99,7 +99,7 @@ Request: *HTTP* ``` -GET https://localhost:51235/vl +GET https://localhost:51235/vl/ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734 ``` *cURL* diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md b/content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md index 8b029ca662..7ff5914baf 100644 --- a/content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md +++ b/content/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md @@ -1,7 +1,7 @@ --- html: account_tx.html parent: account-methods.html -blurb: Get info about an account's transactions. +blurb: Get a list of transactions affecting an account. labels: - Payments - Accounts @@ -9,7 +9,7 @@ labels: # account_tx [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AccountTx.cpp "Source") -The `account_tx` method retrieves a list of transactions that involved the specified account. +The `account_tx` method retrieves a list of validated transactions that involve a given account. ## Request Format @@ -67,6 +67,7 @@ The request includes the following parameters: | `Field` | Type | Description | |:-------------------|:-------------------------------------------|:-----------| | `account` | String | A unique identifier for the account, most commonly the account's address. | +| `tx_type` | String | _(Optional)_ **Clio Only** Return only transactions of a specific type, such as "Clawback", "AccountSet", "AccountDelete", et al. Case-insensitive. Supports any transaction type except `AMM*` (See [Transaction Types](transaction-types.html).) [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | | `ledger_index_min` | Integer | _(Optional)_ Use to specify the earliest ledger to include transactions from. A value of `-1` instructs the server to use the earliest validated ledger version available. | | `ledger_index_max` | Integer | _(Optional)_ Use to specify the most recent ledger to include transactions from. A value of `-1` instructs the server to use the most recent validated ledger version available. | | `ledger_hash` | String | _(Optional)_ Use to look for transactions from a single ledger only. (See [Specifying Ledgers][].) | diff --git a/content/references/http-websocket-apis/public-api-methods/account-methods/index.md b/content/references/http-websocket-apis/public-api-methods/account-methods/index.md new file mode 100644 index 0000000000..4d061dad75 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/account-methods/index.md @@ -0,0 +1,8 @@ +--- +html: account-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Account Methods + +An account in the XRP Ledger represents a holder of XRP and a sender of transactions. Use these methods to work with account info. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/clio-methods/ledger-clio.md b/content/references/http-websocket-apis/public-api-methods/clio-methods/ledger-clio.md index 69e7d9b322..d3e9b67933 100644 --- a/content/references/http-websocket-apis/public-api-methods/clio-methods/ledger-clio.md +++ b/content/references/http-websocket-apis/public-api-methods/clio-methods/ledger-clio.md @@ -12,7 +12,6 @@ The `ledger` command retrieves information about the public [ledger](ledgers.htm Note that the Clio server returns validated ledger data by default. - ## Request Format An example of the request format: @@ -21,36 +20,13 @@ An example of the request format: *WebSocket* ```json -{ - "id": 14, - "command": "ledger", - "ledger_index": "validated", - "full": false, - "accounts": false, - "transactions": false, - "expand": false, - "owner_funds": false, - "diff": false -} +{% include '_api-examples/ledger-clio/wsrpc-request.json' %} ``` *JSON-RPC* ```json -{ - "method": "ledger", - "params": [ - { - "ledger_index": "validated", - "accounts": false, - "full": false, - "transactions": false, - "expand": false, - "owner_funds": false, - "diff": false - } - ] -} +{% include '_api-examples/ledger-clio/jsonrpc-request.json' %} ``` @@ -64,14 +40,21 @@ The request can contain the following parameters: | `ledger_hash` | String | _(Optional)_ A 20-byte hex string for the ledger version to use. (See [Specifying Ledgers][]). | | `ledger_index` | String or Unsigned Integer | _(Optional)_ The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. (See [Specifying Ledgers][]) | | `transactions` | Boolean | _(Optional)_ If `true`, return information on transactions in the specified ledger version. Defaults to `false`. Ignored if you did not specify a ledger version. | -| `expand` | Boolean | _(Optional)_ Provide full JSON-formatted information for transaction/account information instead of only hashes. Defaults to `false`. Ignored unless you request transactions, accounts, or both. | +| `expand` | Boolean | _(Optional)_ Provide full JSON-formatted information for transaction/account information instead of only hashes. Defaults to `false`. Ignored unless you request transactions. | | `owner_funds` | Boolean | _(Optional)_ If `true`, include `owner_funds` field in the metadata of OfferCreate transactions in the response. Defaults to `false`. Ignored unless transactions are included and `expand` is true. | -| `binary` | Boolean | _(Optional)_ If `true`, and `transactions` and `expand` are both also `true`, return transaction information in binary format (hexadecimal string) instead of JSON format. [New in: rippled 0.28.0][] | -| `queue` | Boolean | _(Optional)_ If `true`, and the command is requesting the `current` ledger, includes an array of [queued transactions](transaction-cost.html#queued-transactions) in the results. +| `binary` | Boolean | _(Optional)_ If `true`, and `transactions` and `expand` are both also `true`, return transaction information in binary format (hexadecimal string) instead of JSON format. | | `diff` | Boolean | _(Optional)_ If `true`, returns all objects that were added, modified, or deleted as part of applying transactions in the specified ledger. The `ledger` field is deprecated and may be removed without further notice. +> **Note:** The `ledger` command in Clio does not support the following fields that are supported by [ledger command in rippled](ledger.html): +> +> * `accounts` +> * `full` +> * `queue` +> +> Clio will **always** forward the request to `rippled` when any of the above fields is set to `true`. + ## Response Format An example of a successful response: @@ -81,44 +64,7 @@ An example of a successful response: *WebSocket* ```json -{ - "id": 1, - "result": { - "ledger": { - "accepted": true, - "account_hash": "10EFE192F59B3DE2A2BE5BCE2CA5DC83D066105696FCFC24C055359AAEBD6941", - "close_flags": 0, - "close_time": 711134782, - "close_time_human": "2022-Jul-14 17:26:22.000000000 UTC", - "close_time_resolution": 10, - "closed": true, - "hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_index": "19977716", - "parent_close_time": 711134781, - "parent_hash": "D6DE54039FE5A22D86CD522F1A9B7794E487B74D9B6B8CBDE23F240F434B6749", - "seqNum": "19977716", - "totalCoins": "99987079398940307", - "total_coins": "99987079398940307", - "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000" - }, - "ledger_hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_index": 19977716, - "validated": true - }, - "status": "success", - "type": "response", - "warnings": [ - { - "id": 2001, - "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include ledger_index:current in your request" - }, - { - "id": 2002, - "message": "This server may be out of date" - } - ] -} +{% include '_api-examples/ledger-clio/wsrpc-response.json' %} ``` *JSON-RPC* @@ -126,43 +72,7 @@ An example of a successful response: ```json 200 OK -{ - "result": { - "ledger": { - "accepted": true, - "account_hash": "10EFE192F59B3DE2A2BE5BCE2CA5DC83D066105696FCFC24C055359AAEBD6941", - "close_flags": 0, - "close_time": 711134782, - "close_time_human": "2022-Jul-14 17:26:22.000000000 UTC", - "close_time_resolution": 10, - "closed": true, - "hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_index": "19977716", - "parent_close_time": 711134781, - "parent_hash": "D6DE54039FE5A22D86CD522F1A9B7794E487B74D9B6B8CBDE23F240F434B6749", - "seqNum": "19977716", - "totalCoins": "99987079398940307", - "total_coins": "99987079398940307", - "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000" - }, - "ledger_hash": "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "ledger_index": 19977716, - "validated": true - }, - "status": "success", - "type": "response", - "warnings": [ - { - "id": 2001, - "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include ledger_index:current in your request" - }, - { - "id": 2002, - "message": "This server may be out of date" - } - ] -} +{% include '_api-examples/ledger-clio/jsonrpc-response.json' %} ``` @@ -176,7 +86,7 @@ The response follows the [standard format][], with a successful result containin | `ledger.accountState` | Array | (Omitted unless requested) All the [account-state information](ledger-data-formats.html) in this ledger. | | `ledger.close_flags` | Integer | A bit-map of [flags relating to the closing of this ledger](ledger-header.html#close-flags). | | `ledger.close_time` | Integer | The time this ledger was closed, in [seconds since the Ripple Epoch][] | -| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. [Updated in: rippled 1.5.0][] | +| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. | | `ledger.close_time_resolution` | Integer | Ledger close times are rounded to within this many seconds. | | `ledger.closed` | Boolean | Whether or not this ledger has been closed | | `ledger.ledger_hash` | String | Unique identifying hash of the entire ledger. | @@ -189,24 +99,7 @@ The response follows the [standard format][], with a successful result containin | `ledger_hash` | String | Unique identifying hash of the entire ledger. | | `ledger_index` | Number | The [Ledger Index][] of this ledger. | | `validated` | Boolean | _(May be omitted)_ If `true`, this is a validated ledger version. If omitted or set to `false`, this ledger's data is not final. | -| `queue_data` | Array | _(Omitted unless requested with the `queue` parameter)_ Array of objects describing queued transactions, in the same order as the queue. If the request specified `expand` as true, members contain full representations of the transactions, in either JSON or binary depending on whether the request specified `binary` as true. Added by the [FeeEscalation amendment][]. [New in: rippled 0.70.0][] | -| `diff` | Object | _(Omitted unless requested with the `diff` parameter)_ Object containing an array of hashes that were added, modified, or deleted as part of applying transactions for the ledger. - -The following fields are deprecated and may be removed without further notice: `accepted`, `hash` (use `ledger_hash` instead), `seqNum` (use `ledger_index` instead), `totalCoins` (use `total_coins` instead). - -Each member of the `queue_data` array represents one transaction in the queue. Some fields of this object may be omitted because they have not yet been calculated. The fields of this object are as follows: - -| Field | Value | Description | -|:--------------------|:-----------------|:------------------------------------| -| `account` | String | The [Address][] of the sender for this queued transaction. | -| `tx` | String or Object | By default, this is a String containing the [identifying hash](basic-data-types.html#hashes) of the transaction. If transactions are expanded in binary format, this is an object whose only field is `tx_blob`, containing the binary form of the transaction as a decimal string. If transactions are expanded in JSON format, this is an object containing the [transaction object](transaction-formats.html) including the transaction's identifying hash in the `hash` field. | -| `retries_remaining` | Number | How many times this transaction can be retried before being dropped. | -| `preflight_result` | String | The tentative result from preliminary transaction checking. This is always `tesSUCCESS`. | -| `last_result` | String | _(May be omitted)_ If this transaction was left in the queue after getting a [retriable (`ter`) result](ter-codes.html), this is the exact `ter` result code it got. | -| `auth_change` | Boolean | _(May be omitted)_ Whether this transaction changes this address's [ways of authorizing transactions](transactions.html#authorizing-transactions). | -| `fee` | String | _(May be omitted)_ The [Transaction Cost](transaction-cost.html) of this transaction, in [drops of XRP][]. | -| `fee_level` | String | _(May be omitted)_ The transaction cost of this transaction, relative to the minimum cost for this type of transaction, in [fee levels][]. | -| `max_spend_drops` | String | _(May be omitted)_ The maximum amount of [XRP, in drops][], this transaction could potentially send or destroy. | +| `diff` | Object | _(Omitted unless requested with the `diff` parameter)_ Object containing an array of hashes that were added, modified, or deleted as part of applying transactions for the ledger. If the request specified `"owner_funds": true` and expanded transactions, the response has a field `owner_funds` in the `metaData` object of each [OfferCreate transaction][]. The purpose of this field is to make it easier to track the [funding status of offers](offers.html#lifecycle-of-an-offer) with each new validated ledger. This field is defined slightly differently than the version of this field in [Order Book subscription streams](subscribe.html#order-book-streams): @@ -224,310 +117,8 @@ If the request specified `"diff: true`, the response has an object `diff`. The f ### Response When `diff` is `true` - ````json -{ - "result": { - "ledger": { - "accepted": true, - "account_hash": "29E8799E80245DA68AE2D9C4A454DF3E8FEF5B66C520E644DE0756E548C6897B", - "close_flags": 0, - "close_time": 711135301, - "close_time_human": "2022-Jul-14 17:35:01.000000000 UTC", - "close_time_resolution": 10, - "closed": true, - "hash": "C769F00409D574A982DC0CC071A244C5507D9E2269404957B78081ED8F2FCB1C", - "ledger_hash": "C769F00409D574A982DC0CC071A244C5507D9E2269404957B78081ED8F2FCB1C", - "ledger_index": "19977887", - "parent_close_time": 711135300, - "parent_hash": "29BAC714E9BB7DFE9BE3C8B4AACFDB184389388340A4F3B09CC61A39BAFC3705", - "seqNum": "19977887", - "totalCoins": "99987079398939527", - "total_coins": "99987079398939527", - "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000", - "diff": [ - { - "object_id": "B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B", - "object": { - "Flags": 0, - "Hashes": [ - "A17FED77F200BF8FC66050BCFCC87241DB53C418B3B3C8794C857AAAB76C21EB", - "F991F764BA7B44B5B28F7AC8F03F2BC03B1647AD355CE0F0F91D3B500F862959", - "06523FF3694A078F2DD073A728145455EB451651180C6B0EED1557B657C6C07D", - "69D5C7A206A34CC4A1D21A9D2453E6D72526EA0DA712009F215AA614C259A333", - "94453F6FA048C153A7124C249A7C3393D1A3B4E34A508872A3AA4FE89021221C", - "406FABC4A1C9A30300C814F6B083C00F16568840BBFDCA04369A545CF248472C", - "9396907A543546ECF48C6417373705514653ACB4E585C009EEF525B51CE1F155", - "14082ABB45AFED62BFCDA3CD0465BD17545281C3D671DEC82A837CBEE36E470A", - "1D4D19B06024BE49333EA6C010F9721C5C1A36A5C08D22160945247D3FF9F552", - "91095028948A56A16D8E17488057C27BED696B8E359BAB0D7B8510BBD5F0CFB7", - "FC073AAF3B07260545DCAF0BA0FCFBF7673302D972A534CC8EAB1CD5C4CC73EE", - "4DB17A22F0857992E2BA75C4C15C39B0D420EA26AB6FA862B54E2D65C739117B", - "CB44073EB0A174C4757F453335A5A84848AD899AD09574883946F37DCDEA90B8", - "0B285623C693432532418BA783CF6D731CAFFC312566398B27B67C1B856AACE1", - "5024CD26CE82294E15656CCA0E350284ED6EF70DBD4E4791017F3E4B396D42F5", - "F0E4B4331D5B5B9BB1B43232C8B50E9EB17CD4F6817B04C3AC263C773B44E222", - "7CE5AA21BAEF20DCA4384D469451F6B9BA7AFBA265FCA83B48045C7D994E8BE8", - "91F8A45B27C8DC825157633ED5AE3435F51D5325D29F2F8547D3849F59812CDD", - "520B119EF4ECF9AC3F1B247621A04F0DC187CA6D756B6614E6BCE05A22839C8C", - "EE87D8EB08BCE989C87D530EE4497F5B59B82F859C687E49C6629F34623CF4AE", - "965933B82140D8BC04C324E075AB3758F82F17BE610D12306614A4B1F3695270", - "EA1EF4CECA2EBABBA5A09041C186352B3A57F4496676DF0E4E743794CF2D7ED5", - "A261123CFC1675958992C604778535208FE9C783AA77107393EC1E290D7D3ECF", - "5F3F22362E969A5E7479BB4A9FD31BCFBCCDB66741F49CB72755BC2B76A1D310", - "1BF9D357835E4D8FA82AE99FA13F389F502401E59600F2B72E4B1CB703A54363", - "59A17903D6C8FF3F36C327E207AB54293163A8AA4A3DD515F2C677B736396BAB", - "308905A9E623788DE1170B396AD379863D5492B490D6D56D68F3DDA41CED7F39", - "B686A8CBD0B5464C74B7D7E3AD04D055E59C7FB558B4F65D61FDC005AB91950D", - "81831141523FDEEEF91BA883B0B394D8D608C2353936123F88B4C27F823E5F32", - "DE2BE267BF14EBB26696070989BD229603985CDA105B186C2987C6CC9A0CB83E", - "E54358313465A1701F94806969E07D392AA5E9A6DE99A37E4328B9C9736630C1", - "02190060960D241F3182D4E8CC154D2DAA8224CE3CC1DCDB1E21CAC65B56D9B0", - "B02916AF6E46353828988E785C2F0A26F8CD6196F5905AB4DEDF7034432FBC3E", - "3E95827426FC91549A8E9A80D6CC99997646F6B26CD3F625D94064BA16DE97E1", - "1B83060E2DE91E889FFCE8D0DAEC810197C026EE0F037E612732639EDED3EBCD", - "A8EC7EE25A6B6C13AC6A006F3397EFC8FE38829EF273469186CABE5B529A40EC", - "B00AA09BC4A6180967DD6BA88BDB13F5F59EA4E9C074B752A04DF7C515DF8504", - "45CD713F10A5ECD06B32A2B15E63FEF211852E8BD56B813362D16C7413948785", - "A749FC031CC69E10476B7AD751B068F32DB9192C9CBCBD7CDB018FCF5C1B0934", - "28BC94EB8BC5A0A3313CD825FFC824454ED64C60988D530B334C3112621005AA", - "18DA83251BF498CEFDD189B7894E70ED2BDE832183C4C846B4D6E886B0749CD6", - "4DB4B88C5F4638816E06D880E55DD83C61747D0235C96E1CE1FD709777C20BEA", - "CED44414A9AA99BFD709B7A9072170CB2040EF31D5E84552A930E02CAAB2301C", - "9566A3A6E02FCA0648B67CDACE941BCA7D243D1E2F18742E50EE83C1C8950A19", - "0100F9B48D0999BEBBD18500036741B34E7FC395F155FFA81263EB772C2E1178", - "867719FDA972F549F2149341FE8089A09DFA590C55B7F682A4BDEAEC14A32EEC", - "12C96E5C7D29649AA86FF17969B13978DCBA004F691D476A8AA88EFDA318E5C1", - "8001BD1ED9A0772DA5C89144B56B2504F90329C06E05F4052862EA5560021448", - "D3F85FA0E6B948F05578B99306247B569548A976773DBD0A7811CC8FD62A5033", - "A2B15A5E7B8C3912C7FE9BB93B98333B00AB82322F9759CC43ED6D7BC25F48DF", - "3C7D539FB2D34B20B3BBFFBEA05738560A3811AC496BCB7D504041250D4C393B", - "D5B91302F8146E5BC0FAAF08BE2C228CCC17EF192A423CCEDE1A38A604D9E842", - "F4DBF016BA3836F3B6B5971D1308C04C531FADBD6E74EDB03822851D8C1D5A84", - "EDA6E3DE8138D6129B3A11EBE98F676F66943158E2ADB0E5E548EFCA124C7F7D", - "19EBC639A176F903A739C1C375C240ED5EB58B5D1FB6DF15B3CE4AD6B04689B8", - "E015FE6FCE6C587605A7918ABC25CB37BFABCD7D49A2C7EBDCABC490AEDD90AB", - "9684F16CA2DE7C8056F5125D2AF167E8D3CB5FD8F9A12D87D9D60CE46F098BB3", - "EA9160D3B05F0DFF835AE2AF054BA0FED3DE6A381E11AED991E0850EA1D28A7B", - "2483BA35393AA70856554220E0A3AF07C33C6DB03BE12611456E202A0549FE4D", - "FD0113CC43B968461C3F2747BAFD05878A406BFB77B2DC871CA38F437BF210AB", - "F0DACE2C90812B32803F5D5BEFBACA52CF2F356D7DABD617D9EBBA97328FA785", - "3A0AF0AD0C70DCA0133030A00AAB6B988C898B85A46280D8E76D276CA338424F", - "44EECEB56CD25464A250C2D1A6F8229A2764BBEF7D0055136BCEF30891C38EDA", - "877D98B96F97C3E60F2943D1B8549FE4AE5028404595E5BBB202944AC6F01A60", - "2D315749EF112D77ED3678AB490EF8A57DE306CA8FBACF92C488768A96A9BCFA", - "4369B3388623807E1FC6CDF6903B52603FE4CB6B9BF077C59F8B13B51977AA69", - "56B0C8A81165767A2ABBA57DFAE643EDF4939E90812357C57D771494BF53842B", - "6A6BC82CE98722D24EA37A5BD6147964B80EAB15FA92040ABBE5EDC2091926AB", - "49AF43F65FCA39766EE5A8E1A350728188EC7484415A08C99E1B5D20D3CCB02C", - "8EEB0C0B13C8F4AFC1290108A76A694657CBD88D386C01FAE14DDA3375500B2E", - "3B1005BDD07BD695EDD5E03F82B491D716E1385667403E71359CF4AD1E1A16A9", - "75D9C054146CA170317679319D5B4EABEB43A5BC54DC8C76436E3FDA419FFD02", - "28B85444D0F90113D9DCF445EE1988EE228980103F3E285ABEF1D74EA8D739F4", - "086064E478FE929117878CB7BFCDB615E3E9F2386DBA414922121C026B112A57", - "AD958731124D7ECCA778B9D5671C61E6D7F45FB9DFED3ED088A48BDC9549BF64", - "209D7728CBFA4071209906222B90EE625E4C2204FC26DDE4C07C23079AF75A9A", - "565907A56C26BD5A51CC030F43A06E3A147D468108115D5FA77E345A6E565F6F", - "1D1DE732390C20EDBDDAC5DFC6818A6F0E016C50DC376AD2CDD3F24EF1FA1855", - "A864A423696798807F2FB532F1708FA35C1DAF6C419E67E6E773A6BB129F8266", - "C47D3FFB2F918FA865597A668ECA393F9FC2E429CF0751E970A03C7F48554982", - "D033B2D1E8A2CC77FBE576D074294E80E6C6018802E62FF7BC56701E54A00BD9", - "25D569F5D84842FFEED3A05178B6B9E582E922B43A8CC29F1146E34FAEBBDDD4", - "C56A6197504AD536CFD9A0C26599F6D3E305CF77354CF2D7A33546DA24439B16", - "28F8DB51BED3DDD90194D1452B18C2612C65FC09D77FE31B271C59291C0C2E06", - "D6DE54039FE5A22D86CD522F1A9B7794E487B74D9B6B8CBDE23F240F434B6749", - "D3878EF6C92B84678AE2FBADC40961A161A128EA54AE59C2775CE076C2AE7A85", - "6DF891006E4D4840263C561C54135BFE78FE766A5CC241DDC7A0563BCA4E4C5E", - "FE2D5BB3051F24F6114A7DA14CD393E4187219F52DB83CC0438E0F0B1B350874", - "39292A3C8E56BEA306D83441ADF3F0E65C02BE1DAF3F66F8B95EF46FF44D2487", - "506E1F0A25BE23A46C7483D23CC94583837411D79DD446219964DCE2C0807B0C", - "1D4327D8480B5EA7A61AFB1DBA977D2621372227D5FC55FC90081B3675082DC2", - "39A957F6982825A34ED12AD63BB1DB76BB6C9E725C28BCDA198F62876E0FEE44", - "64C05FA4D16991A613F13655474ABC52C49093334A1C844F5F0682560B0BEE70", - "A4E4AF4BC5B670F2726146233CCA99226EDE61468A26EC4378C919A1D0CC7162", - "6AD5D147ACBA2AA94D19AA4CF8FE8A92F11D57DB7AE21CE2226103CF1B4D49EE", - "7764C4EB977E2E40825593AAC2B51FF8D2DC6E29FD8F257C235D009D24238860", - "DECBDC6150DA4CA92272AE45CBAE9D8174E84FD2D0053707778A3FEA4FCE8961", - "BFED2884BB6E0DCD3BC0E91326CAF674A449D05C7AFAC95BDAB3D51FFBF369E9", - "ADF69FD7A3273D709B2FDD7FC4A2C43D6D0D6BCCC0AF65FDC584B543FEF68240", - "FF3667A56CD39221B8F2B22A479345CBAB9E7CDBA43A0356E694AF58D347D2C9", - "4DD651F3A6E1B3EAEFF384F21C04B2BC39EEEBBD016180781CC007842F5C9DC5", - "B7FF750CAB3F806DD13ED55CB54443BFBA616762DC32891CFF55885407844911", - "24CDF209FBCFA4F10D46CCD4B05C8A80E030A212C6F53FD2DEFE93A0E64A2848", - "E3EA5323ACA4611D84415B787CA74B0BFD9FFC37E1BD862498A8370CEBAF6AA8", - "8D1A5630B0871D4E27F5B13E73CE313C7D65E4694541877940E6D113CBE6D5C1", - "FADA7F6865EF29AF7C9485E170D25C03B96354E8E419532090A33FE11E5C536F", - "A13BFBD7E04AE200E7BF91159B63B8BB6B867B07905DE927515178DB786ABB10", - "0C7B5ECEF3C99096D29307EFCF2FF2C058EA8CAB8E8CE45602C877EE06C8E428", - "B58FF112CCAAAADBBE9CF2B986C84F6F9E63E21AED202DD6A8154287F1374540", - "0466E0A51610D718CCBEB76DD5375B8D19401F14F0D1FC43BADBDBB0CBC2E252", - "5D78C471A058971A621AAA03AC8B48629BBDCBA566729BFB9ABCD57F34C7431A", - "52154C4764859925DCEE21722E782B9661751CA5E12D5C6F20CB25329946FF42", - "D1157510A1F7E60DEEA252C1556D442529BB85FD663ABBE0AB50FDBEB2E6B102", - "AFD343935B0A415478B1B939F7F65B01ACE8697E600D2D4876C44322B4F1C7E5", - "7009160F2CEB809C9D3579471F2AA4375CB898AEE4D75610A1597A231DDCE48D", - "91908F58250C01130E5DCC2F4E27C7B1AC4F3DD2ED37D89903EA1C4814610215", - "F91F97F8B7ADC47DF97C57DBBD9172F6F474519BF98A3F191C36EDD5FED60FA1", - "681992EE99027FB7083F6801F4FC0C42342188D4C19977A723F922DCDD7D96C2", - "431EB9959F3D1FF3902BD92710E9A82D2F2FF2E21551A9A4704CC5D021612CB4", - "94AD216A9B3080BC850B1E4A2F3FDA73000806070FEF53A63EB993BCDC89C380", - "E1CA581E35FD56A476A09FB1FB69E0F756538FBFE8C7784C38042511AB9C98DE", - "11C388D35E712ADC97A3D0AE46FC0C0CAD8F4719255A19A3882194FB2DF5F7F2", - "68D34928D77FCB509A8A06B6EB7C674CDF21E53BC5BED834FEE948F2BE3234AC", - "451A0520DFAD303D5564D9E383C4335EC457C870D4BBC62C33F3B229C41599AF", - "183155CAC5C01A29209CD866BBCCDF2B50EA3D60450AB8E6B69B6F85509C60F2", - "02494D95424824D3F83C9916CDF0C1CA0FAAA1C22B8E7647D16CE84C15E9850D", - "4D140E49AE22792B21B6B96C7DF003954B34393BFB915C18AF1CA7B98C83DC45", - "21735614AFBBCF9D109DCD83424024EE8009292DD8D75715C3A6E1F96250B7DB", - "82EFBE40A7B810369E7C39C199D77061E129CAE36FE4A0A000811A23A7AD7E63", - "AF3CB3F6F3B9D086390BBFC6FD3F8FF2918D58E2B2032D89E83879174F480E3D", - "21848D2B5F50AAF2044662483386A629EA8162995E58A479625F9A1C617A01E7", - "BB8B7E9CAF46E29403C649613AF16FE8AF37478AFCE240BE6C0BC3F54A6EB4F1", - "F2874B80E64C57F8FD1DDA598FBEFFB4B2E6CECF3A984DAEC60F184ABFD2C03A", - "15CDBBDA11931E1D24D37218E65CB3CF08F0E539DD9AB942214C05B3E494B6F0", - "9C210C63F0679B59DA6F003A0C5D6F7E2DB4EA1406BE6EACF449D217C285E037", - "192C9D0C5A49989BCA788F1BBE63B58556BA0E433BBD8ADD4B863D1C0FC356AF", - "03F177E6517BB75C395B4E6A7AB45B8AFE0E974210828713AA02DD47ABD1408A", - "7DDEBAF7B185001AE2BBE964380753231869474CBDA1EC95600DA8E1A02646B7", - "A85AB657FAEDBEB7131FEACDC65347EE08B4ED13D1C72A49CC2B5F8508A5B0CB", - "9C6E9109DA0B5A513DF5E73392AADD7C6C0496C940BE60A9B8416C3D4B556EEB", - "99E68186022471A787D7A8CDA6F75F067925A374B8A429EDC7F36E064AEA4199", - "A4AE86CA5A78E2145856B3A1D3AB7C6F0907BA46978F50633E48049180D031C0", - "EBC6B139FB1EC3E9E24132689CA092C8672EDF356398D29100D9F56BEA81BABB", - "C595DF4DE3C2127C9A6AF2136E6179341D9DF5155A4AC514B2CDD2C29C4AA07D", - "29612714CE0AAAEB97B287F0C5ECD38782FF9BDB2B18D482679E64557223D380", - "DD025B92754F403EA9BCCC588CEE41F7AB64A7458757EAFED1025E193BAA8CFC", - "0E32604081E3D7349225F7F9379E291A69CD78D0C65D332DEA30FEE3795E0F4D", - "CA6F59B04FAE47133310217A832300402B947163AD630365E9BADBCB1F839634", - "1170E9481115804233BB48DECE4A40FC3822D90B304C1842FCF31185982C6A26", - "1F5C266D7C98931AE2FE24C540D62691534CE19D3E0705866F2BCB4A9A7DC96D", - "ED5EE281D36BFD1AF424C9893D81FC89A7B7904B46CBCC73878FDAB881D34104", - "126EFAA40EE6813C63D0C98776E3C1D367CDF082A1CD4BEAD9AEEA0F5B381BF6", - "41B9BAB0370A20827E8D982CBD998A9F3061DBF4E8D8D5FB9A94AB88ECDFA9E0", - "AD84AC38922A4F7419454303357C7F35694D428C4DBA055A73318647A28BBA22", - "F1E13F085E07E8B7B096A94046254D2C753F0A897228F82FA8E8E4470E8EBC84", - "E56D730E2A64F28B5D8F1F622224CA3DAFC9E8977C2D7F6916B668E6F5AC5FEA", - "5176BCD5B49F51EF0357BCDFA99393FF870C956548183C45CCABE3C45A6E0210", - "D0BAF08FBA5DBB1C56B962D799F5A540227A0A730DA01A29709F1069036C0E4C", - "4B6864224578CC821F3FDD8481C9898BE2D6F7AA57E0C088A4190F97361066EE", - "8C82AF844701C4A460E6977AC3138FCC0A16DEFB86C30A1DA5D850E79F4346EA", - "DC494D03BDC80BDB671DC34580C85101B4757C6FABE07B96CD50DCA08F870EF1", - "7E01B6E68F72C59B819D9FE3A427896EAF6976F54D11DBAF4E4B78AD0F4F94CE", - "65DB13E8EF98054BF5EB1B7B458B37D09F062F1ED5AD29CBCD655E082CFDF948", - "87377F31ECBB1BA1FC8D2B78EBDC3BC63F034C81490097C445A43B571C24CE41", - "895B2CD5B1F669A35FBDEF28224126F433758E4A95A5D2503D9058BB70ED676A", - "503D2DA830018B8F422A32409D71DEFFE1F4DA682236B8218607191EC01A3A7D", - "A86D61D03AAB6D516C93F90C80C227A137776B7FEBE3E7BA6F7DBCB18FA800B9", - "E0E88839EFBF8E78AD5981928FC6B75BF1B037534CB20D8A19B173183F726D96", - "1E64DCEF5EAD556D1243CD60AAC9DC8F5B6335ECDD3E2A606A2C504BDF24A752", - "4E3426C8BF92F0B713D59381A865EC646733BA6504907F43D3899E0437783D0F", - "47A43F68C85B560877398BF1F762B69517C43842EDF90D1869C5FFA3D334DFD2", - "1D2077E03065C4B1B893B09A1F9ACFAF4CEFB8EFA48110ECFA88BFC83EBDD02F", - "FA46B288FEAD5D7314855929BEE8E7E6FEED199B4A8EA45DCB026DE0A2F85DEB", - "CDEE9069327F829ECB476103E859033481B1ACA692527B2A117F5188259CB642", - "8C892E4EC406900DC3632A872849F2D58A248E8089EEA5F95B4650F2B8140037", - "9F5C5E1017556B907E60342E8D146556C41A8E125F62101F3E11023FCAB0FA0D", - "A97DFE953D243B9534C4CF446D58928B3DA526A52739C65C218D98E89AB8F154", - "EBF542E9C22DD349ECE2BC90BFA78412F97E45315349F7D6EC530F266A10874D", - "C20330EDC46B8C3DC3841AE2141BF523E5D82BA7453E7C80772EC545B8D74D68", - "5AF5470AD82C035CAEE8822AB8E23F86C87A9304069BF4DDB7B4329C9D99CC95", - "899D94ED8FCA53556E2B679F007298FAD93FC7E948337918154907E8AF44BF88", - "0CD167820E508D58E0EAA828C611BA83E483F31316262AF4DA215A6BC0E049F9", - "D7F686491E837A42A82CEB1209344EA906ABE1D5D2A88A09B3DAFAA41D174CEC", - "B2BD977BE83845585E5BF100DD8F1D074B97B863EF026E5B3E5CF58610A49B76", - "85ABA1F4F4EDC96E21491BDA3B0FBF9D24F85CA031C2CD7885F1EFA70D32B4DE", - "4F88CAC8248F7BDFFBC6FA84FF90041CEEB7E6F37480BFEE121CF3E56D3A79AE", - "5D2BDDB71EE422BDDC673E435121257D4A0603ECDD53A00FE2A5F7F2D0301173", - "198493B9CAAF02641DF7BC6C0F18B45C12E036EAE757F3465EF973924DF8C77D", - "E4AE4E3F8C34122B47E1D5B860911CDC767DAFB039C005961175E2439BF78DC5", - "B5BB5640A47DA626D65122018BD3C415DDBE2A1CAA4407B8B079CEF0C304AD95", - "BDB7AD110926AA63846409D5FD1A99AA1BE868AF245389ABEE31F14EDD15EBB1", - "D8495120CB075C928C72CD926B94C99F5254AAD2D6E244BAFA9A63BA52BD960E", - "D2557CD093DCBFBD3AFDB8EFD11FC1E6F413EEB2761749EB200A872A3D2694DE", - "571BC9B0877BBD6367B06671C27EAF34F816CCA2C21DCE5897B0EFCD0D43A2A3", - "04B1D993665ED4D933932058FD8FC2B94DCDFDE047548FCB3A01DBD14635D077", - "62C1D9B265994D0E7771EF89E862EA78DDD92393AFE0CE8AD8CA88CB6704D1E0", - "900D28DB3B3D291923AEF1D21A4C479C03351C5F8BAD5466B8342D7DA27D8CBC", - "1DE86AADC71CA909F70481703077EE060173D6A29793C310C580B98ECC874201", - "4E0370E993DD3582AF5E6E4305DEDDB827FD54CD724FB1D8C0C9D3233E47BE14", - "A3DB94469E15C3F6929B2D32F738175094927B5BBBB0B604C2D53CB06D346127", - "CAC99E91ED58500BDB307D5DE552CC8C47904475C80BBE11541E893BB1E12B4B", - "4765C07192C891F5241B66A30A97C97FBCC8F4CC69BCB1AF6E3300785623F3A6", - "45BF472F5B15A434F566CBB2FB47C5831D11E4B9B223541368E8548D4C55B59F", - "3FC3D33C9C4A183DA4637E4EF274E8FD33B875BA0FCC04C651FC7C4232B16FAA", - "A98C78E925763C6C1E5042C84A67D41F88270ED729D69A26201E07A5DDA5230F", - "50C0C03269F1F6F7A2D043E87D77E33C90A1DFA89D1ECDEAF4A60C58F35B5A88", - "DE165AA3966F0563450D0574E640299CE74F7F34DCC91B6611F28D5B4F4787C3", - "5991D443A65155D51146CDEB92B20DC6741F5DC69CF9BB09D2143B1FB6CA5DEB", - "7B277027ADA02DE4A2ED276DDFC25A24DC192C4621C690388214EA3A3702D160", - "6DF9246E01CCBB2EB84D45042759DE38626E31FF13C96B96D7B3D810B913C267", - "E57254EC7240FC6EDEDC06472720C85BA29D7767B558D80912153A9AC80B73C9", - "D82D0B64692718A90F92DEA9B86DD919CAC9D00E81D67016622D9EC45ED881A9", - "E7422CE9EEB7CC82B3D4DF2B269EEC0B1D4600DC6CEB4378331724D9B27E498A", - "D7B00E067380396A385C16E83B269DAA401D37983B88C2170F3F5868A8AB12E5", - "E5C8DB25AD8CA4227DD22B37A85ABC550CF10EB22107B9300ACA996CDE0FAD43", - "149EA8F908855BEC67176C2FDBEE3DF60A96996AFFC3CA29BCC19A0E2612A3ED", - "7D30BE677279B82584374E603FD195AA8141F2E7F4027178C86B7FB4489FC824", - "B3516D84A78F96AAE074D01FAA58711E79705D12164894B89A5C65FF8A459379", - "149E3515ACADD2514E3C452CC02A0043F064FC245E559A6F184F60E0B0910ECE", - "7D58A24F7D64BBE0B394F416F332363FEAF205B0094347C4EC036D3B3945103D", - "1433C2844DFB3910310FF1E1C33DFA6F6B687ACCC6D306B3D5EBEA4221B377EB", - "A1AB11FE6E3AF3610BBB0FD4294A6B0DEB8064FEEFC082AB3D02F7A9FC455715", - "E68A28C04129B4193082270FA2CCB8C5616EA265F43CDF3875C7FDB28D6E7FCD", - "05C99D4ED3F3817CC771B5C6C44A5C8D1DC12E104E2EE9D68FDED0A09AE04496", - "998D87EDA73CA171AAC58BFD81AF491655D35A56F39499808F0D615457DD15A3", - "DBB89E5A3DC843EBE9FD76D2900A5EAE13B1F0DD94C4ABD79419BDA49C0D198F", - "1B8CF3D3641353C5B542028D693EB48B234481EBBCDBFFBB4296E2F3F27EF73C", - "F4E458B405F45F4EEC826BE48C5C1DCAE63793D5BB9F594F92C67A3BADA0C22B", - "4C7E38C43A22C6B24060DCDC082F8A870A9B7F503863913AA231CB1464EDEBBA", - "BA1B4558AA11B62016A63D9A62C70D9F1F3D63596EA1FEB48B762C88E499A276", - "5008C69B9FFE9228582C1885E376DDB7F97A32F9D30320A3B6643703E9B36755", - "B8A8DF116E86B84732A2CDD730CB869783581CFF552EBE29B76D249BC03CFBCC", - "64CB6269F83A4E04B1484EFEEF680DF4FD53DEC015E04DAEC3B8A1AC320E64B9", - "15FB1B492A8F53CA3E3BA2DE62504586A895E3F1D9941A491CE44B5676355DA8", - "B815A256260EF5B646309EAF63057C70B83F82927D39E2E8869A4D4D9E4FFD21", - "5F559A5FE8A29C9959508AA33684F71BFD387395330988055C0062CA756DA44B", - "6A4E1C27AB06D35675648C9FC6609D55E778972F70FCD6F28852116BCE56DCB9", - "0390537EF63BF56857F6252E0CD6151C0321AC683AD91C5CBB59A1FE93285506", - "9717BEB3BF2DBFB82E7572458553D0E24C9DEA2B752711813AFA7E36235B6EEE", - "BAE3CFD5371A27B256970B4D94E104D65440EEA94EEF55FE2FB8063D0BA31776", - "21CA517FFA45C251FCD86ABCCBB906BE365B5A597BF6283BEEFF99F562ACA922", - "5336C2C2A8602FE29AA1E67F628CEDC3392B66320A995694176BA34D4CB17C38", - "70C73DC0C72B1D95821F0EA13D4473341BB470044662025D6A228D084DA3859B", - "93BFEB7E283134FB6D4DA2C8AF413CCA5E7EE8903ABA5F6D48BE9BA00798852E", - "3A4B964920627F66A11249A5EF68A9FAC468A2076FC12BE725A5C343E83BCE95", - "13C233A526E35A73DEE0AC36909CC7522C39AED9D42C59D4D7CF646B3F0A09DE", - "94F66D4C66295A3ABEC3D30279F1BD734E09407384B6845770AFBE24E2CA233F", - "C5F9578F580F0111C8728740A39D07957DB8611769676A2ED02E6648B847D865", - "D2BFD4D322A5F37CDCAD66952742943EA9D29D66D22EA0294781FFFF8DE8BD74", - "CF5B95D57193FDD94C3788BC9BED36762CD6B0231CAF5F38423BC7B9B8CCD625", - "FB311E71ED73477183EF1578D152626FCA7E7B2A93785AABF29C5A6267E46953", - "D00F187A37A8E4BBAF6E9041893D30B432CAAFC1B175A27B45C5344AFE3FE462", - "0E9E27E3AA04E9DD3F77146FBE4065CF877EB1DE0555D9FB9EE776EDD7F9B78C", - "7A9D5ED47D42269852BA4AFA373C8BED88F99BB7C4ED9CC4900D2585A3832DD6", - "D7F92889EEC05282AE1BB4375FAC645B968EC23B0AE47E2206496D3E12770BA6", - "29BAC714E9BB7DFE9BE3C8B4AACFDB184389388340A4F3B09CC61A39BAFC3705" - ], - "LastLedgerSequence": 19977886, - "LedgerEntryType": "LedgerHashes", - "index": "B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B" - } - } - ] - }, - "ledger_hash": "C769F00409D574A982DC0CC071A244C5507D9E2269404957B78081ED8F2FCB1C", - "ledger_index": 19977887, - "validated": true, - "status": "success", - "warnings": [ - "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request" - ] - }, - "warnings": [ - "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request", - "Too many requests" - ] -} +{% include '_api-examples/ledger-clio/jsonrpc-diff-response.json' %} ```` ## Possible Errors @@ -535,8 +126,6 @@ If the request specified `"diff: true`, the response has an object `diff`. The f * Any of the [universal error types][]. * `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing. * `lgrNotFound` - The ledger specified by the `ledger_hash` or `ledger_index` does not exist, or it does exist but the server does not have it. -* `noPermission` - If you specified `full` or `accounts` as true, but are not connected to the server as an admin (usually, admin requires connecting on a local port). - {% include '_snippets/rippled-api-links.md' %} diff --git a/content/references/http-websocket-apis/public-api-methods/clio-methods/server_info-clio.md b/content/references/http-websocket-apis/public-api-methods/clio-methods/server_info-clio.md index 1f24b776b4..53cbfec1a3 100644 --- a/content/references/http-websocket-apis/public-api-methods/clio-methods/server_info-clio.md +++ b/content/references/http-websocket-apis/public-api-methods/clio-methods/server_info-clio.md @@ -44,7 +44,7 @@ The request does not take any parameters. ## Response Format -When a client connects to the `Clio` server over `localhost`, the response includes the `counters` and `etl` objects. These objects are omitted from the response when the client is not located on the same server, and hence does not connect over `localhost`. +When a client connects to the Clio server over `localhost`, the response includes the `counters` and `etl` objects. These objects are omitted from the response when the client is not located on the same server, and hence does not connect over `localhost`. An example of a successful response when client connects over `localhost`: @@ -567,14 +567,14 @@ The `info` object may have some arrangement of the following fields: | `Field` | Type | Description | |:------------------------------------|:----------------|:---------------------| | `complete_ledgers` | String | Range expression indicating the sequence numbers of the ledger versions the local `rippled` has in its database. This may be a disjoint sequence such as `24900901-24900984,24901116-24901158`. If the server does not have any complete ledgers (for example, it recently started syncing with the network), this is the string `empty`. | -| `counters` | Object | _(May be omitted)_ Stats on API calls handled since server startup. This is present only if the client connects to the `Clio` server over `localhost`. -| `rpc` | Object | _(May be omitted)_ Stats on each API call handled by the Clio server since startup. Since this is nested within the `counters` object, this is also present only if the client connects to the `Clio` server over `localhost`. | +| `counters` | Object | _(May be omitted)_ Stats on API calls handled since server startup. This is present only if the client connects to the Clio server over `localhost`. +| `rpc` | Object | _(May be omitted)_ Stats on each API call handled by the Clio server since startup. Since this is nested within the `counters` object, this is also present only if the client connects to the Clio server over `localhost`. | | `rpc.*.started` | Number | Number of API calls of this type that the Clio server has started processing since startup. | | `rpc.*.finished` | Number | Number of API calls of this type that the Clio server has finished processing since startup. | | `rpc.*.errored` | Number | Number of API calls of this type that have resulted in some sort of error since startup. | | `rpc.*.forwarded` | Number | Number of API calls of this type that the Clio server has forwarded to a `rippled` P2P server since startup. | -| `rpc.*.duration_us` | Number | The total number of microseconds spent processing API calls of this type since startup. | -| `subscriptions` | Object | _(May be omitted)_ Number of current subscribers for each stream type. Since this is nested within the `counters` object, this is also present only if the client connects to the `Clio` server over `localhost`. | +| `rpc.*.duration_us` | Number | The total number of microseconds spent processing API calls of this type since startup. | +| `subscriptions` | Object | _(May be omitted)_ Number of current subscribers for each stream type. Since this is nested within the `counters` object, this is also present only if the client connects to the Clio server over `localhost`. | | `subscriptions.ledger` | | | | `subscriptions.transactions` | | | | `subscriptions.transactions_proposed` | | | @@ -583,10 +583,15 @@ The `info` object may have some arrangement of the following fields: | `subscriptions.account` | | | | `subscriptions.accounts_proposed` | | | | `subscriptions.books` | | | -| `load_factor` | Number | The load-scaled open ledger transaction cost the server is currently enforcing, as a multiplier on the base transaction cost. For example, at `1000` load factor and a reference transaction cost of 10 drops of XRP, the load-scaled transaction cost is 10,000 drops (0.01 XRP). The load factor is determined by the highest of the [individual server's load factor](transaction-cost.html#local-load-cost), the cluster's load factor, the [open ledger cost](transaction-cost.html#open-ledger-cost) and the overall network's load factor. [Updated in: rippled 0.33.0][] | -| `clio_version` | String | The version number of the running `Clio` server. | -| `validation_quorum` | Number | _(May be omitted)_ Minimum number of trusted validations required to validate a ledger version. Some circumstances may cause the server to require more validations. This value is obtained from `rippled`. This field may be omitted from the response if the `Clio` server is unable to connect to `rippled` for some reason. | -| `rippled_version` | String | _(May be omitted)_ The version number of the running `rippled` server that the `Clio` server is connected to. This field may be omitted from the response if the `Clio` server is unable to connect to `rippled` for some reason. | +| `time` | String | The current time in UTC, according to the server's clock. [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | +| `uptime` | Number | Number of consecutive seconds that the server has been operational. [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | +| `amendment_blocked` | Boolean | _(May be omitted)_ Whether the Clio server is [Amendment Blocked](amendments.html#amendment-blocked-clio-servers) [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | +| `load_factor` | Number | The load-scaled open ledger transaction cost the server is currently enforcing, as a multiplier on the base transaction cost. For example, at `1000` load factor and a reference transaction cost of 10 drops of XRP, the load-scaled transaction cost is 10,000 drops (0.01 XRP). The load factor is determined by the highest of the [individual server's load factor](transaction-cost.html#local-load-cost), the cluster's load factor, the [open ledger cost](transaction-cost.html#open-ledger-cost) and the overall network's load factor. | +| `clio_version` | String | The version number of the running Clio server. | +| `libxrpl_version` | String | The version number of the `libxrpl` library this Clio server was built against. [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | +| `validation_quorum` | Number | _(May be omitted)_ Minimum number of trusted validations required to validate a ledger version. Some circumstances may cause the server to require more validations. This value is obtained from `rippled`. This field may be omitted from the response if the Clio server is unable to connect to `rippled` for some reason. | +| `rippled_version` | String | _(May be omitted)_ The version number of the running `rippled` server that the Clio server is connected to. This field may be omitted from the response if the Clio server is unable to connect to `rippled` for some reason. | +| `network_id` | String | _(May be omitted)_ The network ID of the network that the `rippled` this Clio server is connected to is operating on. This field may be omitted from the response if the Clio server is unable to connect to `rippled` for some reason. [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") | | `validated_ledger` | Object | _(May be omitted)_ Information about the most recent fully-validated ledger. If the most recent validated ledger is not available, the response omits this field and includes `closed_ledger` instead. | | `validated_ledger.age` | Number | The time since the ledger was closed, in seconds. | | `validated_ledger.base_fee_xrp` | Number | Base fee, in XRP. This may be represented in scientific notation such as `1e-05` for 0.00001. | @@ -594,12 +599,12 @@ The `info` object may have some arrangement of the following fields: | `validated_ledger.reserve_base_xrp` | Number | Minimum amount of XRP (not drops) necessary for every account to keep in reserve. This may be represented in scientific notation such as `1e-05` for 0.00001. | | `validated_ledger.reserve_inc_xrp` | Number | Amount of XRP (not drops) added to the account reserve for each object an account owns in the ledger. This may be represented in scientific notation such as `1e-05` for 0.00001. | | `validated_ledger.seq` | Number | The [ledger index][] of the latest validated ledger. | -| `validator_list_expires` | String | _(Admin only)_ Either the human readable time, in UTC, when the current validator list expires, the string `unknown` if the server has yet to load a published validator list or the string `never` if the server uses a static validator list. [Updated in: rippled 1.5.0][] | +| `validator_list_expires` | String | _(Admin only)_ Either the human readable time, in UTC, when the current validator list expires, the string `unknown` if the server has yet to load a published validator list or the string `never` if the server uses a static validator list. | | `cache` | Object | Information on Clio's state data cache. | | `cache.size` | Number | Number of state data objects currently in the cache. | | `cache.is_full` | Boolean | True if cache contains all state data for a specific ledger, false otherwise. Some API calls, such as the [book_offers method][], process much faster when the cache is full. | | `cache.latest_ledger_seq` | Number | The [ledger index][] of the latest validated ledger stored in the cache. | -| `etl` | Object | The `rippled` sources (ETL sources) that the Clio server is connected to. This is present only if the client connects to the `Clio` server over `localhost`. | +| `etl` | Object | The `rippled` sources (ETL sources) that the Clio server is connected to. This is present only if the client connects to the Clio server over `localhost`. | | `etl.etl_sources` | Object Array | List the `rippled` sources (ETL sources) that the Clio server is connected to and extracts data from. | | `etl.etl_sources.validated_range` | String | The validated ledger range retrieved by the P2P `rippled` server. | | `etl.etl_sources.is_connected` | Boolean | True if Clio is connected to this source via websocket, false otherwise. A value of false here could indicate a networking issue, or that `rippled` is not running, amongst other things. | diff --git a/content/references/http-websocket-apis/public-api-methods/clio-server/index.md b/content/references/http-websocket-apis/public-api-methods/clio-server/index.md new file mode 100644 index 0000000000..66c70a6695 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/clio-server/index.md @@ -0,0 +1,8 @@ +--- +html: clio-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Clio Server + +Use these methods to retrieve information using Clio server APIs. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/public-api-methods.md b/content/references/http-websocket-apis/public-api-methods/index.md similarity index 100% rename from content/references/http-websocket-apis/public-api-methods/public-api-methods.md rename to content/references/http-websocket-apis/public-api-methods/index.md diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/index.md b/content/references/http-websocket-apis/public-api-methods/ledger-methods/index.md new file mode 100644 index 0000000000..e29f3c2bab --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/ledger-methods/index.md @@ -0,0 +1,8 @@ +--- +html: ledger-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Ledger Methods + +A ledger version contains a header, a transaction tree, and a state tree, which contain account settings, trustlines, balances, transactions, and other data. Use these methods to retrieve ledger info. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md b/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md index 0d055b0d80..b37bb0674c 100644 --- a/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md +++ b/content/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md @@ -19,11 +19,9 @@ An example of the request format: ```json { - "id": 14, + "id": "example_ledger_req", "command": "ledger", "ledger_index": "validated", - "full": false, - "accounts": false, "transactions": false, "expand": false, "owner_funds": false @@ -38,8 +36,6 @@ An example of the request format: "params": [ { "ledger_index": "validated", - "accounts": false, - "full": false, "transactions": false, "expand": false, "owner_funds": false @@ -67,17 +63,14 @@ The request can contain the following parameters: |:---------------|:-----------------|:----------|-------------| | `ledger_hash` | [Hash][] | No | A 20-byte hex string for the ledger version to use. (See [Specifying Ledgers][]). | | `ledger_index` | [Ledger Index][] | No | The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. (See [Specifying Ledgers][]) | -| `full` | Boolean | No | **Admin only** If `true`, return full information on the entire ledger. Ignored if you did not specify a ledger version. The default is `false`. (Equivalent to enabling `transactions`, `accounts`, and `expand`.) The [Clio server](the-clio-server.html) does not support this field. **Caution:** On Mainnet, this can be gigabytes worth of data, so the request is likely to time out. | -| `accounts` | Boolean | No | **Admin only.** If `true`, return the ledger's entire state data. Ignored if you did not specify a ledger version. The default is `false`. **Caution:** On Mainnet, this can be gigabytes worth of data, so the request is likely to time out. Use [ledger_data][ledger_data method] instead to fetch state data across multiple paginated requests. | | `transactions` | Boolean | No | If `true`, return information on transactions in the specified ledger version. The default is `false`. Ignored if you did not specify a ledger version. | | `expand` | Boolean | No | Provide full JSON-formatted information for transaction/account information instead of only hashes. The default is `false`. Ignored unless you request transactions, accounts, or both. | | `owner_funds` | Boolean | No | If `true`, include `owner_funds` field in the metadata of OfferCreate transactions in the response. The default is `false`. Ignored unless transactions are included and `expand` is true. | -| `binary` | Boolean | No | If `true`, and `transactions` and `expand` are both also `true`, return transaction information in binary format (hexadecimal string) instead of JSON format. [New in: rippled 0.28.0][] | +| `binary` | Boolean | No | If `true`, and `transactions` and `expand` are both also `true`, return transaction information in binary format (hexadecimal string) instead of JSON format. | | `queue` | Boolean | No | If `true`, and the command is requesting the `current` ledger, includes an array of [queued transactions](transaction-cost.html#queued-transactions) in the results. | -| `type` | String | No | Filter by a ledger entry type. {% include '_snippets/lowercase-types.md' %} Ignored unless you request `accounts` (state data). | -The `ledger` field is deprecated and may be removed without further notice. +The `ledger` field is deprecated and may be removed without further notice. The `full`, `accounts`, and `type` fields (admin-only) are also deprecated; the Clio server does not implement these parameters. ## Response Format @@ -88,34 +81,7 @@ An example of a successful response: *WebSocket* ```json -{ - "id": 14, - "result": { - "ledger": { - "accepted": true, - "account_hash": "53BD4650A024E27DEB52DBB6A52EDB26528B987EC61C895C48D1EB44CEDD9AD3", - "close_flags": 0, - "close_time": 638329241, - "close_time_human": "2020-Mar-24 01:40:41.000000000 UTC", - "close_time_resolution": 10, - "closed": true, - "hash": "1723099E269C77C4BDE86C83FA6415D71CF20AA5CB4A94E5C388ED97123FB55B", - "ledger_hash": "1723099E269C77C4BDE86C83FA6415D71CF20AA5CB4A94E5C388ED97123FB55B", - "ledger_index": "54300932", - "parent_close_time": 638329240, - "parent_hash": "DF68B3BCABD31097634BABF0BDC87932D43D26E458BFEEFD36ADF2B3D94998C0", - "seqNum": "54300932", - "totalCoins": "99991024049648900", - "total_coins": "99991024049648900", - "transaction_hash": "50B3A8FE2C5620E43AA57564209AEDFEA3E868CFA2F6E4AB4B9E55A7A62AAF7B" - }, - "ledger_hash": "1723099E269C77C4BDE86C83FA6415D71CF20AA5CB4A94E5C388ED97123FB55B", - "ledger_index": 54300932, - "validated": true - }, - "status": "success", - "type": "response" -} +{% include '_api-examples/ledger/ws-response.json' %} ``` *JSON-RPC* @@ -123,66 +89,16 @@ An example of a successful response: ```json 200 OK -{ - "result": { - "ledger": { - "accepted": true, - "account_hash": "B258A8BB4743FB74CBBD6E9F67E4A56C4432EA09E5805E4CC2DA26F2DBE8F3D1", - "close_flags": 0, - "close_time": 638329271, - "close_time_human": "2020-Mar-24 01:41:11.000000000 UTC", - "close_time_resolution": 10, - "closed": true, - "hash": "3652D7FD0576BC452C0D2E9B747BDD733075971D1A9A1D98125055DEF428721A", - "ledger_hash": "3652D7FD0576BC452C0D2E9B747BDD733075971D1A9A1D98125055DEF428721A", - "ledger_index": "54300940", - "parent_close_time": 638329270, - "parent_hash": "AE996778246BC81F85D5AF051241DAA577C23BCA04C034A7074F93700194520D", - "seqNum": "54300940", - "totalCoins": "99991024049618156", - "total_coins": "99991024049618156", - "transaction_hash": "FC6FFCB71B2527DDD630EE5409D38913B4D4C026AA6C3B14A3E9D4ED45CFE30D" - }, - "ledger_hash": "3652D7FD0576BC452C0D2E9B747BDD733075971D1A9A1D98125055DEF428721A", - "ledger_index": 54300940, - "status": "success", - "validated": true - } -} +{% include '_api-examples/ledger/jsonrpc-response.json' %} ``` *Commandline* ```json Loading: "/etc/opt/ripple/rippled.cfg" -2020-Mar-24 01:42:42.622264591 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005 +2023-Nov-01 21:38:14.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005 -{ - "result" : { - "ledger" : { - "accepted" : true, - "account_hash" : "6B3101BE8F1431C5AC5B43D9731F1F3A747D24B3BEF89B687F0F3039E10EB65A", - "close_flags" : 0, - "close_time" : 638329360, - "close_time_human" : "2020-Mar-24 01:42:40.000000000 UTC", - "close_time_resolution" : 10, - "closed" : true, - "hash" : "C88A0EEC0E785A4C3E99F2A8B8EE0D7BDF3DE6C786C39B1B01547F6DAE5A4B7F", - "ledger_hash" : "C88A0EEC0E785A4C3E99F2A8B8EE0D7BDF3DE6C786C39B1B01547F6DAE5A4B7F", - "ledger_index" : "54300962", - "parent_close_time" : 638329352, - "parent_hash" : "96D2D70DC540BA4614A00C77FCFDED20E7D58AF3238E36655C38C407A56982A3", - "seqNum" : "54300962", - "totalCoins" : "99991024049218063", - "total_coins" : "99991024049218063", - "transaction_hash" : "47AC79011652D2A56AE04D3DD618C60A6669E3F94308C803554E890D2BD94481" - }, - "ledger_hash" : "C88A0EEC0E785A4C3E99F2A8B8EE0D7BDF3DE6C786C39B1B01547F6DAE5A4B7F", - "ledger_index" : 54300962, - "status" : "success", - "validated" : true - } -} +{% include '_api-examples/ledger/jsonrpc-response.json' %} ``` @@ -191,27 +107,28 @@ The response follows the [standard format][], with a successful result containin | `Field` | Type | Description | |:-------------------------------|:--------|:----------------------------------| -| `ledger` | Object | The complete header data of this ledger. | -| `ledger.account_hash` | String | Hash of all account state information in this ledger, as hex | -| `ledger.accountState` | Array | (Omitted unless requested) All the [account-state information](ledger-data-formats.html) in this ledger. | -| `ledger.close_flags` | Integer | A bit-map of [flags relating to the closing of this ledger](ledger-header.html#close-flags). | -| `ledger.close_time` | Integer | The time this ledger was closed, in [seconds since the Ripple Epoch][] | -| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. [Updated in: rippled 1.5.0][] | -| `ledger.close_time_resolution` | Integer | Ledger close times are rounded to within this many seconds. | -| `ledger.closed` | Boolean | Whether or not this ledger has been closed | +| `ledger` | Object | The complete [ledger header data](ledger-header.html) of this ledger, with some additional fields added for convenience. | +| `ledger.account_hash` | String | [Hash](basic-data-types.html#hashes) of all account state information in this ledger, as hexadecimal. | +| `ledger.close_flags` | Number | A bit-map of [flags relating to the closing of this ledger](ledger-header.html#close-flags). | +| `ledger.close_time` | Number | The time this ledger was closed, in [seconds since the Ripple Epoch][]. | +| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. | +| `ledger.close_time_resolution` | Number | Ledger close times are rounded to within this many seconds. | +| `ledger.closed` | Boolean | Whether or not this ledger has been closed. | | `ledger.ledger_hash` | String | Unique identifying hash of the entire ledger. | -| `ledger.ledger_index` | String | The [Ledger Index][] of this ledger, as a quoted integer | -| `ledger.parent_close_time` | Integer | The time at which the previous ledger was closed. | -| `ledger.parent_hash` | String | Unique identifying hash of the ledger that came immediately before this one. | +| `ledger.ledger_index` | String | The [Ledger Index][] of this ledger, as a quoted integer. | +| `ledger.parent_close_time` | Number | The time at which the previous ledger was closed. | +| `ledger.parent_hash` | String | The unique identifying hash of the ledger that came immediately before this one, as hexadecimal. | | `ledger.total_coins` | String | Total number of XRP drops in the network, as a quoted integer. (This decreases as transaction costs destroy XRP.) | -| `ledger.transaction_hash` | String | Hash of the transaction information included in this ledger, as hex | -| `ledger.transactions` | Array | (Omitted unless requested) Transactions applied in this ledger version. By default, members are the transactions' identifying [Hash][] strings. If the request specified `expand` as true, members are full representations of the transactions instead, in either JSON or binary depending on whether the request specified `binary` as true. | -| `ledger_hash` | String | Unique identifying hash of the entire ledger. | +| `ledger.transaction_hash` | String | [Hash](basic-data-types.html#hashes) of the transaction information included in this ledger. | +| `ledger.transactions` | Array | _(Omitted unless requested)_ Transactions applied in this ledger version. By default, members are the transactions' identifying [Hash][] strings. If the request specified `expand` as true, members are full representations of the transactions instead, in either JSON or binary depending on whether the request specified `binary` as true. | +| `ledger_hash` | String | The unique identifying hash of the entire ledger, as hexadecimal. | | `ledger_index` | Number | The [Ledger Index][] of this ledger. | | `validated` | Boolean | _(May be omitted)_ If `true`, this is a validated ledger version. If omitted or set to `false`, this ledger's data is not final. | -| `queue_data` | Array | _(Omitted unless requested with the `queue` parameter)_ Array of objects describing queued transactions, in the same order as the queue. If the request specified `expand` as true, members contain full representations of the transactions, in either JSON or binary depending on whether the request specified `binary` as true. Added by the [FeeEscalation amendment][]. [New in: rippled 0.70.0][] | +| `queue_data` | Array | _(Omitted unless requested with the `queue` parameter)_ Array of objects describing queued transactions, in the same order as the queue. If the request specified `expand` as true, members contain full representations of the transactions, in either JSON or binary depending on whether the request specified `binary` as true. | -The following fields are deprecated and may be removed without further notice: `accepted`, `hash` (use `ledger_hash` instead), `seqNum` (use `ledger_index` instead), `totalCoins` (use `total_coins` instead). +The `ledger.accountState` field (omitted unless requested with `"full": true` or `"accounts": true`) is deprecated. + +The following deprecated fields have been removed: `accepted`, `hash` (use `ledger_hash` instead), `seqNum` (use `ledger_index` instead), `totalCoins` (use `total_coins` instead). [Updated in: rippled 1.12.0][] Each member of the `queue_data` array represents one transaction in the queue. Some fields of this object may be omitted because they have not yet been calculated. The fields of this object are as follows: @@ -238,7 +155,7 @@ If the request specified `"owner_funds": true` and expanded transactions, the re * Any of the [universal error types][]. * `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing. * `lgrNotFound` - The ledger specified by the `ledger_hash` or `ledger_index` does not exist, or it does exist but the server does not have it. -* `noPermission` - If you specified `full` or `accounts` as true, but are not connected to the server as an admin (usually, admin requires connecting on a local port). +* `noPermission` - If you specified `full` or `accounts` as true, but are not connected to the server as an admin (usually, admin requires connecting on localhost). diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md b/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md index 2640a5a005..4f569cfb59 100644 --- a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md +++ b/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md @@ -1,7 +1,7 @@ --- html: amm_info.html parent: path-and-order-book-methods.html -blurb: Get info about an Automted Market Maker (AMM) instance. +blurb: Get info about an Automated Market Maker (AMM) instance. status: not_enabled labels: - Decentralized Exchange @@ -65,7 +65,7 @@ The request includes the following parameters: | `Field` | Type | Required? | Description | |:--------------|:-----------------|:----------|-------------| | `account` | String - [Address][] | No | Show only LP Tokens held by this liquidity provider. | -| `amm_account` | String - [Address][] | No | The address of the AMM's special special AccountRoot. (This is the `issuer` of the AMM's LP Tokens.) | +| `amm_account` | String - [Address][] | No | The address of the AMM's special AccountRoot. (This is the `issuer` of the AMM's LP Tokens.) | | `asset` | Object or String | No | One of the assets of the AMM to look up, as an object with `currency` and `issuer` fields (omit `issuer` for XRP), like [currency amounts][Currency Amount]. For XRP, you can specify as the string `XRP` instead of as an object. | | `asset2` | Object or String | No | The other of the assets of the AMM, as an object with `currency` and `issuer` fields (omit `issuer` for XRP), like [currency amounts][Currency Amount]. | @@ -83,7 +83,7 @@ An example of a successful response: { "result": { "amm": { - "amm_account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", + "account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", "amount": "296890496", "amount2": { "currency": "TST", @@ -140,7 +140,7 @@ An example of a successful response: { "result": { "amm": { - "amm_account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", + "account": "rp9E3FN3gNmvePGhYnf414T2TkUuoxu8vM", "amount": "296890496", "amount2": { "currency": "TST", @@ -207,7 +207,7 @@ The `amm` field is an object describing the current status of an Automated Marke | Field | Type | Description | |-----------------|---------------------|-------------| -| `amm_account` | String | The [Address][] of the AMM Account. | +| `account` | String | The [Address][] of the AMM Account. | | `amount` | [Currency Amount][] | The total amount of one asset in the AMM's pool. (Note: This could be `asset` _or_ `asset2` from the request.) | | `amount2` | [Currency Amount][] | The total amount of the other asset in the AMM's pool. (Note: This could be `asset` _or_ `asset2` from the request.) | | `asset_frozen` | Boolean | _(Omitted for XRP)_ If `true`, the `amount` currency is currently [frozen](freezes.html). | diff --git a/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md b/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md new file mode 100644 index 0000000000..8c1d80857f --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md @@ -0,0 +1,8 @@ +--- +html: path-and-order-book-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Path and Order Book Methods + +Paths define a way for payments to flow through intermediary steps on their way from sender to receiver. Paths enable cross-currency payments by connecting sender and receiver through order books. Use these methods to work with paths and other books. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md b/content/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md new file mode 100644 index 0000000000..235302472c --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md @@ -0,0 +1,8 @@ +--- +html: payment-channel-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Payment Channel Methods + +Payment channels are a tool for facilitating repeated, unidirectional payments, or temporary credit between two parties. Use these methods to work with payment channels. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/server-info-methods/index.md b/content/references/http-websocket-apis/public-api-methods/server-info-methods/index.md new file mode 100644 index 0000000000..1d4469d0d6 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/server-info-methods/index.md @@ -0,0 +1,8 @@ +--- +html: server-info-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Server Info Methods + +Use these methods to retrieve information about the current state of the rippled server. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md b/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md index 0257095e84..76e821fadf 100644 --- a/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md +++ b/content/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md @@ -6,6 +6,7 @@ labels: - Core Server --- # server_state + [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/ServerState.cpp "Source") The `server_state` command asks the server for various machine-readable information about the `rippled` server's current state. The response is almost the same as the [server_info method][], but uses units that are easier to process instead of easier to read. (For example, XRP values are given in integer drops instead of scientific notation or decimal values, and time is given in milliseconds instead of seconds.) diff --git a/content/references/http-websocket-apis/public-api-methods/subscription-methods/index.md b/content/references/http-websocket-apis/public-api-methods/subscription-methods/index.md new file mode 100644 index 0000000000..014b536df0 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/subscription-methods/index.md @@ -0,0 +1,8 @@ +--- +html: subscription-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Subscription Methods + +Use these methods to enable the server to push updates to your client when various events happen, so that you can know and react right away. WebSocket API only. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md b/content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md index 5db9e88485..c61cabf66d 100644 --- a/content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md +++ b/content/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md @@ -89,7 +89,7 @@ The `streams` parameter provides access to the following default streams of info - `server` - Sends a message whenever the status of the `rippled` server (for example, network connectivity) changes. - `validations` - Sends a message whenever the server receives a validation message, regardless of if the server trusts the validator. (An individual `rippled` declares a ledger validated when the server receives validation messages from at least a quorum of trusted validators.) -**Note:** The following streams are not available from servers in [Reporting Mode][]: `server`, `peer_status`, `consensus`. Reporting Mode servers return the error `reportingUnsupported` if you request one of these streams. [Updated in: rippled 1.8.1][] +**Note:** The following streams are not available from Clio and `rippled` servers in [Reporting Mode][]: `server`, `peer_status`, `consensus`. Both will return the `reportingUnsupported` error if you request one of these streams. [Updated in: rippled 1.8.1][] [New in: Clio v2.0](https://github.com/XRPLF/clio/releases/tag/2.0.0 "BADGE_BLUE") Each member of the `books` array, if provided, is an object with the following fields: @@ -169,7 +169,7 @@ The fields from a ledger stream message are as follows: |:--------------------|:--------------------------|:---------------------------| | `type` | String | `ledgerClosed` indicates this is from the ledger stream | | `fee_base` | Number | The [reference transaction cost](transaction-cost.html#reference-transaction-cost) as of this ledger version, in [drops of XRP][]. If this ledger version includes a [SetFee pseudo-transaction](setfee.html) the new transaction cost applies starting with the following ledger version. | -| `fee_ref` | Number | The [reference transaction cost](transaction-cost.html#reference-transaction-cost) in "fee units". | +| `fee_ref` | Number | _(May be omitted)_ The [reference transaction cost](transaction-cost.html#reference-transaction-cost) in "fee units". If the _[XRPFees amendment][]_ is enabled, this field is permanently omitted as it will no longer be relevant. | | `ledger_hash` | String - [Hash][] | The identifying hash of the ledger version that was closed. | | `ledger_index` | Number - [Ledger Index][] | The ledger index of the ledger that was closed. | | `ledger_time` | Number | The time this ledger was closed, in [seconds since the Ripple Epoch][] | diff --git a/content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md b/content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md index 760d941ecb..f614d51d72 100644 --- a/content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md +++ b/content/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md @@ -9,6 +9,7 @@ labels: - Smart Contracts --- # unsubscribe + [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Unsubscribe.cpp "Source") The `unsubscribe` command tells the server to stop sending messages for a particular subscription or set of subscriptions. diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/index.md b/content/references/http-websocket-apis/public-api-methods/transaction-methods/index.md new file mode 100644 index 0000000000..8d0da9e1f3 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/transaction-methods/index.md @@ -0,0 +1,8 @@ +--- +html: transaction-methods.html # watch for clashes w/ this filename +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Transaction Methods + +Transactions are the only thing that can modify the shared state of the XRP Ledger. All business on the XRP Ledger takes the form of transactions. Use these methods to work with transactions. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md b/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md index 9e7490dadf..c927ecf99b 100644 --- a/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md +++ b/content/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md @@ -7,9 +7,10 @@ labels: - Payments --- # tx + [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Tx.cpp "Source") -The `tx` method retrieves information on a single [transaction](transaction-formats.html), by its [identifying hash][]. +The `tx` method retrieves information on a single [transaction](transaction-formats.html), by its [identifying hash][] or its [CTID](ctid.html). ## Request Format @@ -17,7 +18,7 @@ An example of the request format: -*WebSocket* +*WebSocket (Hash)* ```json { @@ -27,7 +28,21 @@ An example of the request format: "binary": false } ``` -*JSON-RPC* + + +*WebSocket (CTID)* + +```json +{ + "id": "CTID example", + "command": "tx", + "ctid": "C005523E00000000", + "binary": false +} +``` + + +*JSON-RPC (Hash)* ```json { @@ -40,6 +55,21 @@ An example of the request format: ] } ``` + +*JSON-RPC (CTID)* + +```json +{ + "method": "tx", + "params": [ + { + "ctid": "C005523E00000000", + "binary": false + } + ] +} +``` + *Commandline* ```sh @@ -53,12 +83,15 @@ rippled tx C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9 fals The request includes the following parameters: -| `Field` | Type | Description | -|:--------------|:--------|:---------------------------------------------------| -| `transaction` | String | The 256-bit hash of the transaction, as hex. | -| `binary` | Boolean | _(Optional)_ If `true`, return transaction data and metadata as binary [serialized](serialization.html) to hexadecimal strings. If `false`, return transaction data and metadata as JSON. The default is `false`. | -| `min_ledger` | Number | _(Optional)_ Use this with `max_ledger` to specify a range of up to 1000 [ledger indexes][ledger index], starting with this ledger (inclusive). If the server [cannot find the transaction](#not-found-response), it confirms whether it was able to search all the ledgers in this range. [New in: rippled 1.5.0][] | -| `max_ledger` | Number | _(Optional)_ Use this with `min_ledger` to specify a range of up to 1000 [ledger indexes][ledger index], ending with this ledger (inclusive). If the server [cannot find the transaction](#not-found-response), it confirms whether it was able to search all the ledgers in the requested range. [New in: rippled 1.5.0][] | +| Field | Type | Required? | Description | +|:--------------|:--------|:----------|----------------------------------------| +| `ctid` | String | No | The [compact transaction identifier](ctid.html) of the transaction to look up. Must use uppercase hexadecimal only. [New in: rippled 1.12.0][] _(Not supported in Clio v2.0 and earlier)_ | +| `transaction` | String | No | The 256-bit hash of the transaction to look up, as hexadecimal. | +| `binary` | Boolean | No | If `true`, return transaction data and metadata as binary [serialized](serialization.html) to hexadecimal strings. If `false`, return transaction data and metadata as JSON. The default is `false`. | +| `min_ledger` | Number | No | Use this with `max_ledger` to specify a range of up to 1000 [ledger indexes][ledger index], starting with this ledger (inclusive). If the server [cannot find the transaction](#not-found-response), it confirms whether it was able to search all the ledgers in this range. | +| `max_ledger` | Number | No | Use this with `min_ledger` to specify a range of up to 1000 [ledger indexes][ledger index], ending with this ledger (inclusive). If the server [cannot find the transaction](#not-found-response), it confirms whether it was able to search all the ledgers in the requested range. | + +You must provide _either_ `ctid` or `transaction`, but not both. **Caution:** This command may successfully find the transaction even if it is included in a ledger _outside_ the range of `min_ledger` to `max_ledger`. @@ -68,250 +101,28 @@ An example of a successful response: -*WebSocket* +*WebSocket (Hash)* ```json -{ - "id": 1, - "result": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "Fee": "12", - "Flags": 0, - "LastLedgerSequence": 56865248, - "OfferSequence": 5037708, - "Sequence": 5037710, - "SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE", - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - }, - "TransactionType": "OfferCreate", - "TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9", - "date": 648248020, - "hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", - "inLedger": 56865245, - "ledger_index": 56865245, - "meta": { - "AffectedNodes": [ - { - "ModifiedNode": { - "FinalFields": { - "ExchangeRate": "4F04C66806CF7400", - "Flags": 0, - "RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "000000000000000000000000434E590000000000", - "TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "Balance": "10404767991", - "Flags": 0, - "OwnerCount": 3, - "Sequence": 5037711 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2", - "PreviousFields": { - "Balance": "10404768003", - "Sequence": 5037710 - }, - "PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008", - "PreviousTxnLgrSeq": 56865244 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "BookNode": "0000000000000000", - "Flags": 0, - "OwnerNode": "0000000000000000", - "PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C", - "PreviousTxnLgrSeq": 56865244, - "Sequence": 5037708, - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "IndexNext": "0000000000000000", - "IndexPrevious": "0000000000000000", - "Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" - } - }, - { - "CreatedNode": { - "LedgerEntryType": "Offer", - "LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B", - "NewFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "Sequence": 5037710, - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - } - } - } - } - ], - "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" - }, - "validated": true - }, - "status": "success", - "type": "response" -} +{% include '_api-examples/tx/ws-response-hash.json' %} ``` -*JSON-RPC* +*WebSocket (CTID)* ```json -{ - "result": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "Fee": "12", - "Flags": 0, - "LastLedgerSequence": 56865248, - "OfferSequence": 5037708, - "Sequence": 5037710, - "SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE", - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - }, - "TransactionType": "OfferCreate", - "TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9", - "date": 648248020, - "hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", - "inLedger": 56865245, - "ledger_index": 56865245, - "meta": { - "AffectedNodes": [ - { - "ModifiedNode": { - "FinalFields": { - "ExchangeRate": "4F04C66806CF7400", - "Flags": 0, - "RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "000000000000000000000000434E590000000000", - "TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "Balance": "10404767991", - "Flags": 0, - "OwnerCount": 3, - "Sequence": 5037711 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2", - "PreviousFields": { - "Balance": "10404768003", - "Sequence": 5037710 - }, - "PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008", - "PreviousTxnLgrSeq": 56865244 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "BookNode": "0000000000000000", - "Flags": 0, - "OwnerNode": "0000000000000000", - "PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C", - "PreviousTxnLgrSeq": 56865244, - "Sequence": 5037708, - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "IndexNext": "0000000000000000", - "IndexPrevious": "0000000000000000", - "Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548" - } - }, - { - "CreatedNode": { - "LedgerEntryType": "Offer", - "LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B", - "NewFields": { - "Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM", - "BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400", - "Sequence": 5037710, - "TakerGets": "15000000000", - "TakerPays": { - "currency": "CNY", - "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", - "value": "20160.75" - } - } - } - } - ], - "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" - }, - "status": "success", - "validated": true - } -} +{% include '_api-examples/tx/ws-response-ctid.json' %} +``` + +*JSON-RPC (Hash)* + +```json +{% include '_api-examples/tx/jsonrpc-response-hash.json' %} +``` + +*JSON-RPC (CTID)* + +```json +{% include '_api-examples/tx/jsonrpc-response-ctid.json' %} ``` *Commandline* @@ -442,15 +253,15 @@ The response follows the [standard format][], with a successful result containin | `Field` | Type | Description | |:---------------|:---------------------------------|:-------------------------| -| `date` | Number | A [number of seconds](basic-data-types.html#specifying-time) since January 1, 2000 (00:00 UTC) indicating the [close time](ledger-close-times.html) of the ledger in which the transaction was applied. This value does not have a precise relationship with physical time, and is dependent on the close time resolution. | -| `hash` | String | The SHA-512 hash of the transaction | +| `ctid` | String | The transaction's [compact transaction identifier](ctid.html). [New in: rippled 1.12.0][] _(Not supported in Clio v2.0 and earlier.)_ | +| `date` | Number | The [close time](ledger-close-times.html) of the ledger in which the transaction was applied, in [seconds since the Ripple Epoch][]. | +| `hash` | String | The unique [identifying hash][] of the transaction | | `inLedger` | Number | _(Deprecated)_ Alias for `ledger_index`. | | `ledger_index` | Number | The [ledger index][] of the ledger that includes this transaction. | | `meta` | Object (JSON) or String (binary) | [Transaction metadata](transaction-metadata.html), which describes the results of the transaction. | | `validated` | Boolean | If `true`, this data comes from a validated ledger version; if omitted or set to `false`, this data is not final. | | (Various) | (Various) | Other fields from the [Transaction object](transaction-formats.html) | -**Note:** `rippled` 1.7.0 has a known issue where the `meta` field contains JSON even if the request asked for binary. ([#3791](https://github.com/XRPLF/rippled/pull/3791)) ### Not Found Response @@ -463,9 +274,9 @@ This means that a `txnNotFound` on its own is not enough to know the [final outc To further narrow down the possibilities, you can provide a range of ledgers to search using the `min_ledger` and `max_ledger` fields in the request. If you provide **both** of those fields, the `txnNotFound` response includes the following field: -| `Field` | Type | Description | +| Field | Type | Description | |:---------------|:----------|:-----------------------------------------| -| `searched_all` | Boolean | _(Omitted unless the request provided `min_ledger` and `max_ledger`)_ If `true`, the server was able to search all of the specified ledger versions, and the transaction was in none of them. If `false`, the server did not have all of the specified ledger versions available, so it is not sure if one of them might contain the transaction. [New in: rippled 1.5.0][] | +| `searched_all` | Boolean | _(Omitted unless the request provided `min_ledger` and `max_ledger`)_ If `true`, the server was able to search all of the specified ledger versions, and the transaction was in none of them. If `false`, the server did not have all of the specified ledger versions available, so it is not sure if one of them might contain the transaction. | An example of a `txnNotFound` response that fully searched a requested range of ledgers: diff --git a/content/references/http-websocket-apis/public-api-methods/utility-methods/index.md b/content/references/http-websocket-apis/public-api-methods/utility-methods/index.md new file mode 100644 index 0000000000..4a794687e0 --- /dev/null +++ b/content/references/http-websocket-apis/public-api-methods/utility-methods/index.md @@ -0,0 +1,8 @@ +--- +html: utility-methods.html +parent: public-api-methods.html +template: pagetype-category.html.jinja +--- +# Utility Methods + +Use these methods to perform convenient tasks, such as ping and random number generation. \ No newline at end of file diff --git a/content/references/http-websocket-apis/public-api-methods/utility-methods/random.md b/content/references/http-websocket-apis/public-api-methods/utility-methods/random.md index 17b31ad767..5f4bbc023c 100644 --- a/content/references/http-websocket-apis/public-api-methods/utility-methods/random.md +++ b/content/references/http-websocket-apis/public-api-methods/utility-methods/random.md @@ -6,6 +6,7 @@ labels: - Core Server --- # random + [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Random.cpp "Source") The `random` command provides a random number to be used as a source of entropy for random number generation by clients. diff --git a/content/references/protocol-reference/ledger-data/ledger-header.md b/content/references/protocol-reference/ledger-data/ledger-header.md deleted file mode 100644 index 3b927c78fc..0000000000 --- a/content/references/protocol-reference/ledger-data/ledger-header.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -html: ledger-header.html -parent: ledger-data-formats.html -blurb: A unique header that describes the contents of a ledger version. -labels: - - Data Retention - - Blockchain ---- -# Ledger Header -[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/ledger/ReadView.h#L71 "Source") - -Every [ledger version](ledgers.html) has a unique header that describes the contents. You can look up a ledger's header information with the [ledger method][]. The contents of the ledger header are as follows: - -| Field | JSON Type | [Internal Type][] | Description | -|:-----------------------------|:----------|:------------------|:--------------| -| `ledger_index` | String | UInt32 | The [ledger index][Ledger Index] of the ledger. Some API methods display this as a quoted integer; some display it as a native JSON number. | -| `ledger_hash` | String | Hash256 | The [SHA-512Half][] of this ledger version. This serves as a unique identifier for this ledger and all its contents. | -| `account_hash` | String | Hash256 | The [SHA-512Half][] of this ledger's state tree information. | -| `close_time` | Number | UInt32 | The approximate time this ledger version closed, as the number of seconds since the Ripple Epoch of 2000-01-01 00:00:00. This value is rounded based on the `close_time_resolution`. | -| `closed` | Boolean | Boolean | If `true`, this ledger version is no longer accepting new transactions. (However, unless this ledger version is validated, it might be replaced by a different ledger version with a different set of transactions.) | -| `parent_hash` | String | Hash256 | The `ledger_hash` value of the previous ledger version that is the direct predecessor of this one. If there are different versions of the previous ledger index, this indicates from which one the ledger was derived. | -| `total_coins` | String | UInt64 | The total number of [drops of XRP][] owned by accounts in the ledger. This omits XRP that has been destroyed by transaction fees. The actual amount of XRP in circulation is lower because some accounts are "black holes" whose keys are not known by anyone. | -| `transaction_hash` | String | Hash256 | The [SHA-512Half][] of the transactions included in this ledger. | -| `close_time_resolution` | Number | Uint8 | An integer in the range \[2,120\] indicating the maximum number of seconds by which the `close_time` could be rounded. | -| [`closeFlags`](#close-flags) | (Omitted) | UInt8 | A bit-map of flags relating to the closing of this ledger. | - - -## Ledger Index -{% include '_snippets/data_types/ledger_index.md' %} - - - -## Close Flags - -The ledger has only one flag defined for `closeFlags`: **`sLCF_NoConsensusTime`** (value `1`). If this flag is enabled, it means that validators had different [close times for the ledger](ledger-close-times.html), but built otherwise the same ledger, so they declared consensus while "agreeing to disagree" on the close time. In this case, official `close_time` value of the ledger is 1 second after that of the parent ledger. - -The `closeFlags` field is not included in any JSON representations of a ledger, but is included in the binary representation of a ledger, and is one of the fields that determine the ledger's hash. - - -## See Also - -For ledger basics, see [Ledgers](ledgers.html). - - - -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} -{% include '_snippets/rippled_versions.md' %} diff --git a/content/references/protocol-reference/serialization.md b/content/references/protocol/binary-format.md similarity index 99% rename from content/references/protocol-reference/serialization.md rename to content/references/protocol/binary-format.md index fbeba09d62..ec42addf8c 100644 --- a/content/references/protocol-reference/serialization.md +++ b/content/references/protocol/binary-format.md @@ -13,7 +13,7 @@ curated_anchors: - name: Type List anchor: "#type-list" --- -# Serialization Format +# Binary Format [[Source]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp#L696-L718 "Source") This page describes the XRP Ledger's canonical binary format for transactions and other data. This binary format is necessary to create and verify digital signatures of those transactions' contents, and is also used in other places including in the [peer-to-peer communications between servers](peer-protocol.html). The [`rippled` APIs](http-websocket-apis.html) typically use JSON to communicate with client applications. However, JSON is unsuitable as a format for serializing transactions for being digitally signed, because JSON can represent the same data in many different but equivalent ways. diff --git a/content/references/protocol-reference/data-types/base58-encodings.md b/content/references/protocol/data-types/base58-encodings.md similarity index 100% rename from content/references/protocol-reference/data-types/base58-encodings.md rename to content/references/protocol/data-types/base58-encodings.md diff --git a/content/references/protocol-reference/data-types/basic-data-types.md b/content/references/protocol/data-types/basic-data-types.md similarity index 100% rename from content/references/protocol-reference/data-types/basic-data-types.md rename to content/references/protocol/data-types/basic-data-types.md diff --git a/content/references/protocol-reference/data-types/currency-formats.md b/content/references/protocol/data-types/currency-formats.md similarity index 100% rename from content/references/protocol-reference/data-types/currency-formats.md rename to content/references/protocol/data-types/currency-formats.md diff --git a/content/references/protocol-reference/data-types/nftoken.md b/content/references/protocol/data-types/nftoken.md similarity index 100% rename from content/references/protocol-reference/data-types/nftoken.md rename to content/references/protocol/data-types/nftoken.md diff --git a/content/references/protocol/index.md b/content/references/protocol/index.md new file mode 100644 index 0000000000..62e30424ba --- /dev/null +++ b/content/references/protocol/index.md @@ -0,0 +1,10 @@ +--- +html: protocol-reference.html +parent: references.html +template: pagetype-category.html.jinja +eyebrow_text: Features and Rules +blurb: Features and rules of the XRP Ledger protocol, regardless of how you access it. +--- +# XRP Ledger Protocol Reference + +Features and rules of the XRP Ledger protocol, regardless of how you access it. \ No newline at end of file diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-common-fields.md b/content/references/protocol/ledger-data/common-fields.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-common-fields.md rename to content/references/protocol/ledger-data/common-fields.md diff --git a/content/references/protocol-reference/ledger-data/ledger-data-formats.md b/content/references/protocol/ledger-data/index.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-data-formats.md rename to content/references/protocol/ledger-data/index.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/accountroot.md b/content/references/protocol/ledger-data/ledger-entry-types/accountroot.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/accountroot.md rename to content/references/protocol/ledger-data/ledger-entry-types/accountroot.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/amendments.md b/content/references/protocol/ledger-data/ledger-entry-types/amendments.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/amendments.md rename to content/references/protocol/ledger-data/ledger-entry-types/amendments.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/amm.md b/content/references/protocol/ledger-data/ledger-entry-types/amm.md similarity index 96% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/amm.md rename to content/references/protocol/ledger-data/ledger-entry-types/amm.md index d420422c46..f8743cb65b 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/amm.md +++ b/content/references/protocol/ledger-data/ledger-entry-types/amm.md @@ -18,7 +18,7 @@ An `AMM` ledger entry describes a single [Automated Market Maker](automated-mark ```json { - "AMMAccount" : "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S", + "Account" : "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S", "Asset" : { "currency" : "XRP" }, @@ -75,7 +75,7 @@ In addition to the [common fields](ledger-entry-common-fields.html), `{{currentp |:-----------------|:--------------------|:------------------|:----------|--------------| | `Asset` | Object | STIssue | Yes | The definition for one of the two assets this AMM holds. In JSON, this is an object with `currency` and `issuer` fields. | | `Asset2` | Object | STIssue | Yes | The definition for the other asset this AMM holds. In JSON, this is an object with `currency` and `issuer` fields. | -| `AMMAccount` | String | AccountID | Yes | The address of the [special account](accountroot.html#special-amm-accountroot-entries) that holds this AMM's assets. | +| `Account` | String | AccountID | Yes | The address of the [special account](accountroot.html#special-amm-accountroot-entries) that holds this AMM's assets. | | `AuctionSlot` | Object | STObject | No | Details of the current owner of the auction slot, as an [Auction Slot object](#auction-slot-object). | | `LPTokenBalance` | [Currency Amount][] | Amount | Yes | The total outstanding balance of liquidity provider tokens from this AMM instance. The holders of these tokens can vote on the AMM's trading fee in proportion to their holdings, or redeem the tokens for a share of the AMM's assets which grows with the trading fees collected. | | `TradingFee` | Number | UInt16 | Yes | The percentage fee to be charged for trades against this AMM instance, in units of 1/100,000. The maximum value is 1000, for a 1% fee. | diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/check.md b/content/references/protocol/ledger-data/ledger-entry-types/check.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/check.md rename to content/references/protocol/ledger-data/ledger-entry-types/check.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.md b/content/references/protocol/ledger-data/ledger-entry-types/depositpreauth.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.md rename to content/references/protocol/ledger-data/ledger-entry-types/depositpreauth.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/directorynode.md b/content/references/protocol/ledger-data/ledger-entry-types/directorynode.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/directorynode.md rename to content/references/protocol/ledger-data/ledger-entry-types/directorynode.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/escrow.md b/content/references/protocol/ledger-data/ledger-entry-types/escrow.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/escrow.md rename to content/references/protocol/ledger-data/ledger-entry-types/escrow.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/feesettings.md b/content/references/protocol/ledger-data/ledger-entry-types/feesettings.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/feesettings.md rename to content/references/protocol/ledger-data/ledger-entry-types/feesettings.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.md b/content/references/protocol/ledger-data/ledger-entry-types/index.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.md rename to content/references/protocol/ledger-data/ledger-entry-types/index.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.md b/content/references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.md rename to content/references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.md b/content/references/protocol/ledger-data/ledger-entry-types/negativeunl.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.md rename to content/references/protocol/ledger-data/ledger-entry-types/negativeunl.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.md b/content/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md similarity index 96% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.md rename to content/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md index 2109d29d8a..f6154e3bf8 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.md +++ b/content/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md @@ -56,7 +56,7 @@ _(Added by the [NonFungibleTokensV1_1 amendment][].)_ ## NFTokenOffer Transactions -Unlike [Offers for fungible tokens](offers.html), a `NFTokenOffer` is not stored in an order book and is never automatically matched or executed. A buyer must _explicitly_ choose to accept an `NFTokenOffer` that offers to buy a `NFToken`. Similarly, a seller must _explicitly_ choose to accept a specific `NFTokenOffer` that offers to buy a `NFToken` object that they own. +Unlike [Offers for fungible tokens](offers.html), a `NFTokenOffer` is not stored in an order book and is never automatically matched or executed. A buyer must _explicitly_ choose to accept an `NFTokenOffer` that offers to sell a `NFToken`. Similarly, a seller must _explicitly_ choose to accept a specific `NFTokenOffer` that offers to buy a `NFToken` object that they own. The transactions for `NFToken` trading are: diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.md b/content/references/protocol/ledger-data/ledger-entry-types/nftokenpage.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.md rename to content/references/protocol/ledger-data/ledger-entry-types/nftokenpage.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/offer.md b/content/references/protocol/ledger-data/ledger-entry-types/offer.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/offer.md rename to content/references/protocol/ledger-data/ledger-entry-types/offer.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/paychannel.md b/content/references/protocol/ledger-data/ledger-entry-types/paychannel.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/paychannel.md rename to content/references/protocol/ledger-data/ledger-entry-types/paychannel.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.md b/content/references/protocol/ledger-data/ledger-entry-types/ripplestate.md similarity index 97% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.md rename to content/references/protocol/ledger-data/ledger-entry-types/ripplestate.md index beff667756..c08b41753f 100644 --- a/content/references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.md +++ b/content/references/protocol/ledger-data/ledger-entry-types/ripplestate.md @@ -87,7 +87,7 @@ The two accounts connected by the trust line can each change their own settings ## {{currentpage.name}} Reserve -A `RippleState` entry counts as one item towards the owner reserve of [owner reserve](reserves.html#owner-reserves) of _one or both_ of the accounts it connects. In typical cases, the holder of a token owes a reserve and the issuer of the token does not. +A `RippleState` entry counts as one item towards the [owner reserve](reserves.html#owner-reserves) of _one or both_ of the accounts it connects. In typical cases, the holder of a token owes a reserve and the issuer of the token does not. Specifically, the entry counts towards an account's reserve if that account modifies a trust line to put it in a non-default state. The `lsfLowReserve` and `lsfHighReserve` flags indicate which account(s) are responsible for the owner reserve. The protocol automatically sets these flags when it modifies a trust line. diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/signerlist.md b/content/references/protocol/ledger-data/ledger-entry-types/signerlist.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/signerlist.md rename to content/references/protocol/ledger-data/ledger-entry-types/signerlist.md diff --git a/content/references/protocol-reference/ledger-data/ledger-entry-types/ticket.md b/content/references/protocol/ledger-data/ledger-entry-types/ticket.md similarity index 100% rename from content/references/protocol-reference/ledger-data/ledger-entry-types/ticket.md rename to content/references/protocol/ledger-data/ledger-entry-types/ticket.md diff --git a/content/references/protocol/ledger-data/ledger-header.md b/content/references/protocol/ledger-data/ledger-header.md new file mode 100644 index 0000000000..eb4c3f7e59 --- /dev/null +++ b/content/references/protocol/ledger-data/ledger-header.md @@ -0,0 +1,46 @@ +--- +html: ledger-header.html +parent: ledger-data-formats.html +blurb: A unique header that describes the contents of a ledger version. +labels: + - Data Retention + - Blockchain +--- +# Ledger Header +[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/ledger/ReadView.h#L71 "Source") + +Every [ledger version](ledgers.html) has a unique header that describes the contents. You can look up a ledger's header information with the [ledger method][]. The contents of the ledger header are as follows: + +| Field | JSON Type | [Internal Type][] | Description | +|:------------------------------|:----------|:------------------|:--------------| +| `ledger_index` | String | UInt32 | The [ledger index][Ledger Index] of the ledger. Some API methods display this as a quoted integer; some display it as a native JSON number. | +| `ledger_hash` | String | Hash256 | The [SHA-512Half][] of this ledger version. This serves as a unique identifier for this ledger and all its contents. | +| `account_hash` | String | Hash256 | The [SHA-512Half][] of this ledger's state tree information. | +| [`close_flags`](#close-flags) | Number | UInt8 | A bit-map of flags relating to the closing of this ledger. | +| `close_time` | Number | UInt32 | The [approximate time this ledger version closed](ledger-close-times.html), as the number of seconds since the Ripple Epoch of 2000-01-01 00:00:00 UTC. This value is rounded based on the `close_time_resolution`. | +| `close_time_resolution` | Number | Uint8 | An integer in the range \[2,120\] indicating the maximum number of seconds by which the `close_time` could be rounded. | +| `closed` | Boolean | Boolean | If `true`, this ledger version is no longer accepting new transactions. (However, unless this ledger version is validated, it might be replaced by a different ledger version with a different set of transactions.) | +| `parent_hash` | String | Hash256 | The `ledger_hash` value of the previous ledger version that is the direct predecessor of this one. If there are different versions of the previous ledger index, this indicates from which one the ledger was derived. | +| `total_coins` | String | UInt64 | The total number of [drops of XRP][] owned by accounts in the ledger. This omits XRP that has been destroyed by transaction fees. The actual amount of XRP in circulation is lower because some accounts are "black holes" whose keys are not known by anyone. | +| `transaction_hash` | String | Hash256 | The [SHA-512Half][] of the transactions included in this ledger. | + + +## Ledger Index +{% include '_snippets/data_types/ledger_index.md' %} + + + +## Close Flags + +The ledger has only one flag defined for `closeFlags`: **`sLCF_NoConsensusTime`** (value `1`). If this flag is enabled, it means that validators had different [close times for the ledger](ledger-close-times.html), but built otherwise the same ledger, so they declared consensus while "agreeing to disagree" on the close time. In this case, official `close_time` value of the ledger is 1 second after that of the parent ledger. + + +## See Also + +For ledger basics, see [Ledgers](ledgers.html). + + + +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled_versions.md' %} diff --git a/content/references/protocol-reference/transactions/transaction-common-fields.md b/content/references/protocol/transactions/common-fields.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-common-fields.md rename to content/references/protocol/transactions/common-fields.md diff --git a/content/references/protocol-reference/transactions/transaction-formats.md b/content/references/protocol/transactions/index.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-formats.md rename to content/references/protocol/transactions/index.md diff --git a/content/references/protocol-reference/transactions/transaction-metadata.md b/content/references/protocol/transactions/metadata.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-metadata.md rename to content/references/protocol/transactions/metadata.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.md b/content/references/protocol/transactions/pseudo-transaction-types/enableamendment.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.md rename to content/references/protocol/transactions/pseudo-transaction-types/enableamendment.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.md b/content/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.md rename to content/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/setfee.md b/content/references/protocol/transactions/pseudo-transaction-types/setfee.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/setfee.md rename to content/references/protocol/transactions/pseudo-transaction-types/setfee.md diff --git a/content/references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.md b/content/references/protocol/transactions/pseudo-transaction-types/unlmodify.md similarity index 100% rename from content/references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.md rename to content/references/protocol/transactions/pseudo-transaction-types/unlmodify.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tec-codes.md b/content/references/protocol/transactions/transaction-results/tec-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tec-codes.md rename to content/references/protocol/transactions/transaction-results/tec-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tef-codes.md b/content/references/protocol/transactions/transaction-results/tef-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tef-codes.md rename to content/references/protocol/transactions/transaction-results/tef-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tel-codes.md b/content/references/protocol/transactions/transaction-results/tel-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tel-codes.md rename to content/references/protocol/transactions/transaction-results/tel-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tem-codes.md b/content/references/protocol/transactions/transaction-results/tem-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tem-codes.md rename to content/references/protocol/transactions/transaction-results/tem-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/ter-codes.md b/content/references/protocol/transactions/transaction-results/ter-codes.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/ter-codes.md rename to content/references/protocol/transactions/transaction-results/ter-codes.md diff --git a/content/references/protocol-reference/transactions/transaction-results/tes-success.md b/content/references/protocol/transactions/transaction-results/tes-success.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/tes-success.md rename to content/references/protocol/transactions/transaction-results/tes-success.md diff --git a/content/references/protocol-reference/transactions/transaction-results/transaction-results.md b/content/references/protocol/transactions/transaction-results/transaction-results.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-results/transaction-results.md rename to content/references/protocol/transactions/transaction-results/transaction-results.md diff --git a/content/references/protocol-reference/transactions/transaction-types/accountdelete.md b/content/references/protocol/transactions/types/accountdelete.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/accountdelete.md rename to content/references/protocol/transactions/types/accountdelete.md diff --git a/content/references/protocol-reference/transactions/transaction-types/accountset.md b/content/references/protocol/transactions/types/accountset.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/accountset.md rename to content/references/protocol/transactions/types/accountset.md diff --git a/content/references/protocol-reference/transactions/transaction-types/ammbid.md b/content/references/protocol/transactions/types/ammbid.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ammbid.md rename to content/references/protocol/transactions/types/ammbid.md diff --git a/content/references/protocol-reference/transactions/transaction-types/ammcreate.md b/content/references/protocol/transactions/types/ammcreate.md similarity index 97% rename from content/references/protocol-reference/transactions/transaction-types/ammcreate.md rename to content/references/protocol/transactions/types/ammcreate.md index 79f0161efc..98aee59a37 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammcreate.md +++ b/content/references/protocol/transactions/types/ammcreate.md @@ -44,7 +44,7 @@ Creates both an [AMM entry][] and a [special AccountRoot entry](accountroot.html | `Amount2` | [Currency Amount][] | Amount | Yes | The second of the two assets to fund this AMM with. This must be a positive amount. | | `TradingFee` | Number | UInt16 | Yes | The fee to charge for trades against this AMM instance, in units of 1/100,000; a value of 1 is equivalent to 0.001%. The maximum value is `1000`, indicating a 1% fee. The minimum value is `0`. | -One or both of `Amount` and `Amount2` can be [tokens](tokens.html); at most one of them can be [XRP](xrp.html). They cannot both have the same currency code and issuer. The tokens' issuers must have [Default Ripple](rippling.html#the-default-ripple-flag) enabled. If the [Clawback amendment][] :not_enabled: is enabled, those issuers must not have enabled the Allow Clawback flag. An AMM's LP tokens _can_ be used as one of the assets for another AMM. +One or both of `Amount` and `Amount2` can be [tokens](tokens.html); at most one of them can be [XRP](xrp.html). They cannot both have the same currency code and issuer. The tokens' issuers must have [Default Ripple](rippling.html#the-default-ripple-flag) enabled. If the [Clawback amendment][] :not_enabled: is enabled, those issuers must not have enabled the Allow Clawback flag. The assets _cannot_ be LP tokens for another AMM. ## Special Transaction Cost diff --git a/content/references/protocol-reference/transactions/transaction-types/ammdelete.md b/content/references/protocol/transactions/types/ammdelete.md similarity index 98% rename from content/references/protocol-reference/transactions/transaction-types/ammdelete.md rename to content/references/protocol/transactions/types/ammdelete.md index 421f2e40ae..e2834e6507 100644 --- a/content/references/protocol-reference/transactions/transaction-types/ammdelete.md +++ b/content/references/protocol/transactions/types/ammdelete.md @@ -16,7 +16,7 @@ Delete an empty [Automated Market Maker](automated-market-makers.html) (AMM) ins Normally, an [AMMWithdraw transaction][] automatically deletes an AMM and all associated ledger entries when it withdraws all the assets from the AMM's pool. However, if there are too many trust lines to the AMM account to remove in one transaction, it may stop before fully removing the AMM. Similarly, an AMMDelete transaction removes up to a maximum of 512 trust lines; it may take several AMMDelete transactions to delete all the trust lines and the associated AMM. In all cases, only the last such transaction deletes the AMM and AccountRoot ledger entries. -## Example AMMDelete JSON +## Example {{currentpage.name}} JSON ```json { diff --git a/content/references/protocol-reference/transactions/transaction-types/ammdeposit.md b/content/references/protocol/transactions/types/ammdeposit.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ammdeposit.md rename to content/references/protocol/transactions/types/ammdeposit.md diff --git a/content/references/protocol-reference/transactions/transaction-types/ammvote.md b/content/references/protocol/transactions/types/ammvote.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ammvote.md rename to content/references/protocol/transactions/types/ammvote.md diff --git a/content/references/protocol-reference/transactions/transaction-types/ammwithdraw.md b/content/references/protocol/transactions/types/ammwithdraw.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ammwithdraw.md rename to content/references/protocol/transactions/types/ammwithdraw.md diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcancel.md b/content/references/protocol/transactions/types/checkcancel.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/checkcancel.md rename to content/references/protocol/transactions/types/checkcancel.md diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcash.md b/content/references/protocol/transactions/types/checkcash.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/checkcash.md rename to content/references/protocol/transactions/types/checkcash.md diff --git a/content/references/protocol-reference/transactions/transaction-types/checkcreate.md b/content/references/protocol/transactions/types/checkcreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/checkcreate.md rename to content/references/protocol/transactions/types/checkcreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/clawback.md b/content/references/protocol/transactions/types/clawback.md similarity index 81% rename from content/references/protocol-reference/transactions/transaction-types/clawback.md rename to content/references/protocol/transactions/types/clawback.md index 7c426aedb1..65a2a385a4 100644 --- a/content/references/protocol-reference/transactions/transaction-types/clawback.md +++ b/content/references/protocol/transactions/types/clawback.md @@ -4,7 +4,6 @@ parent: transaction-types.html blurb: Claw back tokens you've issued. labels: - Tokens -status: not_enabled --- # Clawback @@ -16,7 +15,7 @@ Claw back tokens issued by your account. Clawback is disabled by default. To use clawback, you must send an [AccountSet transaction][] to enable the **Allow Trust Line Clawback** setting. An issuer with any existing tokens cannot enable Clawback. You can only enable **Allow Trust Line Clawback** if you have a completely empty owner directory, meaning you must do so before you set up any trust lines, offers, escrows, payment channels, checks, or signer lists. After you enable Clawback, it cannot reverted: the account permanently gains the ability to claw back issued assets on trust lines. -## Example Clawback JSON +## Example {{currentpage.name}} JSON ```json { @@ -30,15 +29,13 @@ Clawback is disabled by default. To use clawback, you must send an [AccountSet t } ``` -## Clawback Fields - {% include '_snippets/tx-fields-intro.md' %} | Field | JSON Type | [Internal Type][] | Description | |:-------------------|:----------|:------------------|:------------------| | `Amount` | [Currency Amount][] | Amount |Indicates the amount being clawed back, as well as the counterparty from which the amount is being clawed back. The quantity to claw back, in the `value` sub-field, must not be zero. If this is more than the current balance, the transaction claws back the entire balance. The sub-field `issuer` within `Amount` represents the token holder's account ID, rather than the issuer's.| -The account executing this transaction must be the issuer of the asset being clawed back. Note that in the XRP Ledger, trust lines are bidirectional and, under some configurations, both sides can be seen as the *issuer* of an asset. In this specification, the term *issuer* is used to mean the side of the trust line that has an outstanding balance (that is, 'owes' the issued asset) that it wants to claw back. +**Note:** In the XRP Ledger, the party that created a token is called the _issuer_, but trust lines are bidirectional and, under some configurations, both sides can be seen as the issuer. In this transaction, the token issuer's address is in the `Account` field, and the token holder's address is in the `Amount` field's `issuer` sub-field. ## Error Cases @@ -49,8 +46,8 @@ Besides errors that can occur for all transactions, {{currentpage.name}} transac |:-----------|:------------| | `temDISABLED` | Occurs if the [Clawback amendment](known-amendments.html#clawback) is not enabled. | | `temBAD_AMOUNT` | Occurs if the holder's balance is 0. It is not an error if the amount exceeds the holder's balance; in that case, the maximum available balance is clawed back. Also occurs if the counterparty listed in `Amount` is the same as the `Account` issuing this transaction. | -| `tecNO-LINE` | Occurs there is no trust line with the counterparty or that trust line's balance is 0. | -| `tecNO-PERMISSION` | Occurs if you attempt to set `lsfAllowTrustlineClawback` while `lsfNoFreeze` is set. Also occurs, conversely, if you try to set `lsfNoFreeze` while `lsfAllowTrustLineClawback` is set. | +| `tecNO_LINE` | Occurs there is no trust line with the counterparty or that trust line's balance is 0. | +| `tecNO_PERMISSION` | Occurs if you attempt to set `lsfAllowTrustlineClawback` while `lsfNoFreeze` is set. Also occurs, conversely, if you try to set `lsfNoFreeze` while `lsfAllowTrustLineClawback` is set. | {% include '_snippets/rippled-api-links.md' %} diff --git a/content/references/protocol-reference/transactions/transaction-types/depositpreauth.md b/content/references/protocol/transactions/types/depositpreauth.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/depositpreauth.md rename to content/references/protocol/transactions/types/depositpreauth.md diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowcancel.md b/content/references/protocol/transactions/types/escrowcancel.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/escrowcancel.md rename to content/references/protocol/transactions/types/escrowcancel.md diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowcreate.md b/content/references/protocol/transactions/types/escrowcreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/escrowcreate.md rename to content/references/protocol/transactions/types/escrowcreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/escrowfinish.md b/content/references/protocol/transactions/types/escrowfinish.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/escrowfinish.md rename to content/references/protocol/transactions/types/escrowfinish.md diff --git a/content/references/protocol-reference/transactions/transaction-types/transaction-types.md b/content/references/protocol/transactions/types/index.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/transaction-types.md rename to content/references/protocol/transactions/types/index.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md b/content/references/protocol/transactions/types/nftokenacceptoffer.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md rename to content/references/protocol/transactions/types/nftokenacceptoffer.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenburn.md b/content/references/protocol/transactions/types/nftokenburn.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/nftokenburn.md rename to content/references/protocol/transactions/types/nftokenburn.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md b/content/references/protocol/transactions/types/nftokencanceloffer.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md rename to content/references/protocol/transactions/types/nftokencanceloffer.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md b/content/references/protocol/transactions/types/nftokencreateoffer.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md rename to content/references/protocol/transactions/types/nftokencreateoffer.md diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenmint.md b/content/references/protocol/transactions/types/nftokenmint.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/nftokenmint.md rename to content/references/protocol/transactions/types/nftokenmint.md diff --git a/content/references/protocol-reference/transactions/transaction-types/offercancel.md b/content/references/protocol/transactions/types/offercancel.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/offercancel.md rename to content/references/protocol/transactions/types/offercancel.md diff --git a/content/references/protocol-reference/transactions/transaction-types/offercreate.md b/content/references/protocol/transactions/types/offercreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/offercreate.md rename to content/references/protocol/transactions/types/offercreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/payment.md b/content/references/protocol/transactions/types/payment.md similarity index 99% rename from content/references/protocol-reference/transactions/transaction-types/payment.md rename to content/references/protocol/transactions/types/payment.md index 58d3e980a7..43e086c087 100644 --- a/content/references/protocol-reference/transactions/transaction-types/payment.md +++ b/content/references/protocol/transactions/types/payment.md @@ -53,7 +53,7 @@ Payments are also the only way to [create accounts](#creating-accounts). The `Payment` transaction type functions differently depending on how you fill in the `Payment` fields: -| Payment type | `Amount` | `SendMax` | `Paths` | `Address` = `Destination`? | Description | +| Payment type | `Amount` | `SendMax` | `Paths` | `Account` = `Destination`? | Description | |:-------------|:----------|:-----------|:----------|:---------------------------|:--| | [Direct XRP Payment][] | String (XRP) | Omitted | Omitted | No | Transfers XRP directly from one account to another, using one transaction. Always delivers the exact amount. No fee applies other than the basic [transaction cost](transaction-cost.html). | | [Creating or redeeming tokens][] | Object | Object (optional) | Optional | No | Increases or decreases the amount of a non-XRP currency or asset tracked in the XRP Ledger. [Transfer fees](transfer-fees.html) and [freezes](freezes.html) do not apply when sending and redeeming directly. | diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelclaim.md b/content/references/protocol/transactions/types/paymentchannelclaim.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelclaim.md rename to content/references/protocol/transactions/types/paymentchannelclaim.md diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelcreate.md b/content/references/protocol/transactions/types/paymentchannelcreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelcreate.md rename to content/references/protocol/transactions/types/paymentchannelcreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/paymentchannelfund.md b/content/references/protocol/transactions/types/paymentchannelfund.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/paymentchannelfund.md rename to content/references/protocol/transactions/types/paymentchannelfund.md diff --git a/content/references/protocol-reference/transactions/transaction-types/setregularkey.md b/content/references/protocol/transactions/types/setregularkey.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/setregularkey.md rename to content/references/protocol/transactions/types/setregularkey.md diff --git a/content/references/protocol-reference/transactions/transaction-types/signerlistset.md b/content/references/protocol/transactions/types/signerlistset.md similarity index 99% rename from content/references/protocol-reference/transactions/transaction-types/signerlistset.md rename to content/references/protocol/transactions/types/signerlistset.md index 8c9faacf20..e5178d919c 100644 --- a/content/references/protocol-reference/transactions/transaction-types/signerlistset.md +++ b/content/references/protocol/transactions/types/signerlistset.md @@ -6,6 +6,7 @@ labels: - Security --- # SignerListSet + [[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/SetSignerList.cpp "Source") The SignerListSet transaction creates, replaces, or removes a list of signers that can be used to [multi-sign](multi-signing.html) a transaction. This transaction type was introduced by the [MultiSign amendment][]. diff --git a/content/references/protocol-reference/transactions/transaction-types/ticketcreate.md b/content/references/protocol/transactions/types/ticketcreate.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/ticketcreate.md rename to content/references/protocol/transactions/types/ticketcreate.md diff --git a/content/references/protocol-reference/transactions/transaction-types/trustset.md b/content/references/protocol/transactions/types/trustset.md similarity index 100% rename from content/references/protocol-reference/transactions/transaction-types/trustset.md rename to content/references/protocol/transactions/types/trustset.md diff --git a/content/resources/contribute-documentation/contribute-documentation.md b/content/resources/contribute-documentation/index.md similarity index 97% rename from content/resources/contribute-documentation/contribute-documentation.md rename to content/resources/contribute-documentation/index.md index e3e746752d..1c30b275ee 100644 --- a/content/resources/contribute-documentation/contribute-documentation.md +++ b/content/resources/contribute-documentation/index.md @@ -112,9 +112,7 @@ Use the following conventions when creating a page: - Don't hard-wrap text in Markdown files. - For code samples, try to keep lines no longer than 80 columns wide. - When in doubt, follow [Ciro Santilli's Markdown Style Guide (Writability Profile)](https://cirosantilli.com/markdown-style-guide/). -- Landing pages should be in subfolders and should have the same filename as the folder. For example, the landing page of the "Accounts" page group should be `accounts/accounts.md` with the HTML filename `accounts.html`. - - **Warning:** Don't use `index.md`. +- The page within a category should be in a subfolder named for that category but can be less verbose (especially if the page title includes words also in the parent directories), should have the filename `index.md`, and a title that is similar to the folder name. For example, the "Protocol Reference" index page is at `references/protocol/index.md`. - Don't use tab characters for indentation in Markdown or code samples. Use 4 spaces per indent, except in **JavaScript** code samples, which should use 2 spaces per indent. diff --git a/content/resources/index.md b/content/resources/index.md new file mode 100644 index 0000000000..4fe7b08dcf --- /dev/null +++ b/content/resources/index.md @@ -0,0 +1,8 @@ +--- +html: resources.html +parent: index.html +template: pagetype-category.html.jinja +--- +# Resources + +Other resources to help understand the XRP Ledger and develop on it. \ No newline at end of file diff --git a/content/resources/known-amendments.md b/content/resources/known-amendments.md index 905a706101..11d1109634 100644 --- a/content/resources/known-amendments.md +++ b/content/resources/known-amendments.md @@ -87,9 +87,9 @@ The following is a list of [amendments](amendments.html) that are being develope **Tip:** This list is updated manually. If you're working on an amendment and have a private network to test the changes, you can edit this page to add your in-development amendment to this list. For more information on contributing to the XRP Ledger, see [Contribute Code to the XRP Ledger](contribute-code-flow.html). -## Vetoed or Obsolete Amendments +## Obsolete Amendments -The following is a list of known [amendments](amendments.html) that have been vetoed and removed in a previous version, or are obsolete and have been marked for removal. +The following is a list of known [amendments](amendments.html) that have been removed in a previous version, or are obsolete and have been marked for removal. | Name | Introduced | Status | |:----------------------------------|:-----------|:------------------------------| @@ -97,10 +97,10 @@ The following is a list of known [amendments](amendments.html) that have been ve | [fixNFTokenDirV1][] | v1.9.1 | [Obsolete: To Be Removed]( "BADGE_RED") | | [NonFungibleTokensV1][] | v1.9.0 | [Obsolete: To Be Removed]( "BADGE_RED") | | [CryptoConditionsSuite][] | v0.60.0 | [Obsolete: To Be Removed]( "BADGE_RED") | -| [SHAMapV2][] | v0.32.1 | [Vetoed: Removed in v1.4.0](https://xrpl.org/blog/2019/rippled-1.4.0.html "BADGE_RED") | -| [FlowV2][] | v0.32.1 | [Vetoed: Removed in v0.33.0](https://xrpl.org/blog/2016/flowv2-vetoed.html "BADGE_RED") | -| [SusPay][] | v0.31.0 | [Vetoed: Removed in v0.60.0](https://xrpl.org/blog/2017/ticksize-voting.html#upcoming-features "BADGE_RED") | -| [Tickets][] | v0.30.1 | [Vetoed: Removed in v0.90.0](https://xrpl.org/blog/2018/rippled-0.90.0.html "BADGE_RED") | +| [SHAMapV2][] | v0.32.1 | [Obsolete: Removed in v1.4.0](https://xrpl.org/blog/2019/rippled-1.4.0.html "BADGE_RED") | +| [FlowV2][] | v0.32.1 | [Obsolete: Removed in v0.33.0](https://xrpl.org/blog/2016/flowv2-vetoed.html "BADGE_RED") | +| [SusPay][] | v0.31.0 | [Obsolete: Removed in v0.60.0](https://xrpl.org/blog/2017/ticksize-voting.html#upcoming-features "BADGE_RED") | +| [Tickets][] | v0.30.1 | [Obsolete: Removed in v0.90.0](https://xrpl.org/blog/2018/rippled-0.90.0.html "BADGE_RED") | ## Details about Known Amendments @@ -688,6 +688,8 @@ Amendment `fixNFTokenRemint` would change the way NFT sequence numbers are const The amendment also introduces a new account deletion restriction. An account can only be deleted if `FirstNFTSequence` + `MintedNFTokens` + 256 is less than the current ledger sequence (256 was chosen as a heuristic restriction for account deletion and already exists in the account deletion constraint). Without this restriction, an NFT could still be re-minted under certain conditions. +**Warning:** This is a **breaking change** for projects & tools relying on their own locally computed NFTokenID for minted tokens. If you have code to calculate NFTokenIDs, you must update it to match the new fomula. For an example of how to do so with backwards compatibility, see this [well known reference implementation in JavaScript](https://gist.github.com/N3TC4T/a20fb528931ed009ebdd708be4938748?permalink_comment_id=4738760#gistcomment-4738760). + ### fixNonFungibleTokensV1_2 [fixNonFungibleTokensV1_2]: #fixnonfungibletokensv1_2 diff --git a/content/tutorials/get-started/get-started-using-http-websocket-apis.ja.md b/content/tutorials/get-started/get-started-using-http-websocket-apis.ja.md deleted file mode 100644 index c94a801da5..0000000000 --- a/content/tutorials/get-started/get-started-using-http-websocket-apis.ja.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -html: get-started-using-http-websocket-apis.html -parent: http-websocket-apis-tutorials.html -blurb: XRP Ledgerの操作に使用できるAPIとライブラリを使い始めましょう。 -cta_text: 開始しよう -labels: - - 開発 -top_nav_name: HTTP / WebSocket -top_nav_grouping: 始めましょう -showcase_icon: assets/img/logos/globe.svg ---- -# HTTP / WebSocket APIの使用開始 - -XRP Ledgerのコアサーバーソフトウェアは[`rippled`](xrpl-servers.html)です。XRP Ledgerでの開発に進むには、`rippled`サーバーのAPIにアクセスします。 - -APIにアクセスする最も簡単な方法は、[**WebSocket API Tool**](websocket-api-tool.html)を使用するか、[XRP Ledger Explorer](https://livenet.xrpl.org/)を使用してレジャーの進行状況をその場で確認することです。 - -[`rippled`の独自のインスタンスを実行](install-rippled.html)したり、[公開サーバー](#公開サーバー)を使用したりすることもできます。 - -## 公開サーバー - -Rippleは、XRP Ledgerコミュニティ向けにいくつかの公開サーバーを提供しています。 - -| 演算子 | [ネットワーク][] | JSON-RPC URL | WebSocket URL | 注記 | -|:----------|:----------|:----------|:----------|:----------| -| Ripple | **Mainnet** | `https://s1.ripple.com:51234/` | `wss://s1.ripple.com/` | 汎用サーバークラスター | -| Ripple | **Mainnet** | `https://s2.ripple.com:51234/` | `wss://s2.ripple.com/` | [すべての履歴が記録されるサーバー](ledger-history.html#すべての履歴)クラスター | -| Ripple | Testnet | `https://s.altnet.rippletest.net:51234/` | `wss://s.altnet.rippletest.net/` | Testnet公開サーバー | -| Ripple | Devnet | `https://s.devnet.rippletest.net:51234/` | `wss://s.devnet.rippletest.net/` | Devnet公開サーバー | - -[ネットワーク]: parallel-networks.html - -これらの公開サーバーは継続的な使用やビジネスでの使用を想定したものではなく、いつでも使用不可となる可能性があります。日常的な使用については、独自の`rippled`サーバーを自社で運用するか、信頼できる事業者と運用委託契約を締結します。 - - -## 管理者アクセス権限 - -`rippled`サーバーの[管理メソッド](admin-api-methods.html)を使用するには、次のように行います。この場合、サーバーのバインド用として設定した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-RPC(HTTP)、ポート6006でWebSocket(WS)の接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。 - - -## WebSocket API - -いくつかのメソッドをXRP Ledgerで試すことを予定している場合は、独自のWebSocketコードを記述することなく、[Ripple WebSocket APIツール](websocket-api-tool.html)でAPIをすぐに使用できます。後ほど、独自の`rippled`サーバーへの接続が必要となった時点で、[ブラウザー](monitor-incoming-payments-with-websocket.html)または[Node.jsで独自のクライアントをビルド](https://www.npmjs.com/package/ws)することが可能です。 - -### 要求フォーマット - -`rippled`サーバーへのWebSocketを開いた後、以下の属性を使用して、コマンドを[JSON](https://en.wikipedia.org/wiki/JSON)オブジェクトとして送信できます。 - -* コマンド名を最上位の`"command"`フィールドに記述します。 -* コマンドのすべての関連パラメーターも最上位に記述します。 -* 任意の値を指定して`"id"`フィールドを記述します(省略可)。この要求への応答では、同一の`"id"`フィールドを使用します。そうすることで、応答が順不同で到達した場合も、どの要求によってどの応答を得られたのかがわかります。 - -応答はJSONオブジェクトとして返されます。 - -## 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要求を作成するには、`rippled`サーバーがJSON-RPC接続をリッスンしているポートおよびIPアドレス上で、HTTP **POST**要求をルートパス(`/`)に送信します。HTTP/1.0またはHTTP/1.1を使用できます。HTTPSを使用する場合は、TLS v1.2を使用してください。セキュリティーの維持を理由として、`rippled`はSSL v3以前を _サポートしていません_ 。 - -値を`application/json`として、`Content-Type`ヘッダーを常に記述してください。 - -複数の要求を作成することを予定している場合は、要求ごとに接続を閉じて再び開くことなく済むよう、[キープアライブ](http://tools.ietf.org/html/rfc7230#section-6.3)を使用します。 - -以下の属性を指定して、要求の本文を[JSON](https://en.wikipedia.org/wiki/JSON)オブジェクトとして送信します。 - -* コマンドを最上位の`"method"`フィールドに記述します。 -* 最上位の`"params"`フィールドを記述します。このフィールドの内容は、コマンドのすべてのパラメーターが指定された1つの入れ子JSONオブジェクトのみを保持している**1要素配列**です。 - -応答もJSONオブジェクトになります。 - - -## コマンドライン - -このコマンドラインインターフェイスは、JSON-RPCのものと同一のサービスに接続するため、公開サーバーおよびサーバー構成は同一です。コマンドラインクライアントとして、`rippled`がローカルインスタンスに接続します。例: - -``` -rippled --conf=/etc/rippled.cfg server_info -``` - -**注記:** コマンドラインインターフェイスは、管理の目的でのみ使用されることを想定しています。 _サポートされるAPIではありません_。 - - -### 要求フォーマット - -コマンドラインでは、通常の(先頭にダッシュが付いた)コマンドラインオプションに続けてコマンドを記述した後、一連の限定的なパラメーターを空白文字で区切って記述します。空白文字などの特殊な文字が含まれている可能性があるパラメーター値は、一重引用符で囲みます。 - - -## 要求の例 - - - -*WebSocket* - -``` -{ - "id": 2, - "command": "account_info", - "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", - "strict": true, - "ledger_index": "validated" -} -``` - -*JSON-RPC* - -``` -POST http://s1.ripple.com:51234/ -{ - "method": "account_info", - "params": [ - { - "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", - "strict": true, - "ledger_index": "validated" - } - ] -} -``` - -*コマンドライン* - -``` -rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated true -``` - - - - -## 応答フォーマット - -### 成功した場合の応答の例 - - - -*WebSocket* - -``` -{ - "id": 2, - "status": "success", - "type": "response", - "result": { - "account_data": { - "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", - "Balance": "27389517749", - "Flags": 0, - "LedgerEntryType": "AccountRoot", - "OwnerCount": 18, - "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932", - "PreviousTxnLgrSeq": 6592159, - "Sequence": 1400, - "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" - }, - "ledger_index": 6760970 - } -} -``` - -*JSON-RPC* - -``` -HTTP Status:200 OK -{ - "result": { - "account_data": { - "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", - "Balance": "27389517749", - "Flags": 0, - "LedgerEntryType": "AccountRoot", - "OwnerCount": 18, - "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932", - "PreviousTxnLgrSeq": 6592159, - "Sequence": 1400, - "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" - }, - "ledger_index": 6761012, - "status": "success" - } -} -``` - -*コマンドライン* - -``` -{ - "result": { - "account_data": { - "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", - "Balance": "27389517749", - "Flags": 0, - "LedgerEntryType": "AccountRoot", - "OwnerCount": 18, - "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932", - "PreviousTxnLgrSeq": 6592159, - "Sequence": 1400, - "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" - }, - "ledger_index": 6761012, - "status": "success" - } -} -``` - - - -成功した場合の応答に含まれているフィールドは、以下のとおりです。 - -| `Field` | 型 | 説明 | -|:----------|:----------|:----------| -| `id` | (場合により異なる) | (WebSocketのみ)この応答の要求元となった要求で提供されているID。 | -| `status` | 文字列 | (WebSocketのみ)値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 | -| `result.status` | 文字列 | (JSON-RPCおよびコマンドライン)値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 | -| `type` | 文字列 | (WebSocketのみ)値が`response`である場合、コマンドに対する正常な応答であることを示します。[非同期の通知](subscribe.html)では、`ledgerClosed`や`transaction`など異なる値が使用されます。 | -| `result` | オブジェクト | クエリーの結果。内容はコマンドによって異なります。 | - -### コマンドライン - -コマンドラインのメソッドはJSON-RPCと同一のインターフェイスを使用しているため、応答フォーマットはJSON-RPCの応答と同一です。 - -## 関連項目 - -- **コンセプト:** - - [XRP Ledgerの概要](xrp-ledger-overview.html) - - [ソフトウェアエコシステム](software-ecosystem.html) - - [並列ネットワーク](parallel-networks.html) -- **チュートリアル:** - - [xrpl.js for JavaScriptの使用開始](get-started-using-javascript.html) - - [信頼できるトランザクションの送信](reliable-transaction-submission.html) - - [rippledサーバーの管理](manage-the-rippled-server.html) -- **リファレンス:** - - [rippled APIリファレンス](http-websocket-apis.html) - - [Ripple Data API v2](data-api.html) diff --git a/content/tutorials/get-started/get-started-using-python.md b/content/tutorials/get-started/get-started-using-python.md index c9f35b4427..6fc98ed8aa 100644 --- a/content/tutorials/get-started/get-started-using-python.md +++ b/content/tutorials/get-started/get-started-using-python.md @@ -94,6 +94,7 @@ This method returns a [`Wallet` instance](https://xrpl-py.readthedocs.io/en/late print(test_wallet) # print output + public_key:: 022FA613294CD13FFEA759D0185007DBE763331910509EF8F1635B4F84FA08AEE3 private_key:: -HIDDEN- classic_address: raaFKKmgf6CRZttTVABeTcsqzRQ51bNR6Q diff --git a/content/tutorials/http-websocket-apis/index.md b/content/tutorials/http-websocket-apis/index.md new file mode 100644 index 0000000000..a84431878a --- /dev/null +++ b/content/tutorials/http-websocket-apis/index.md @@ -0,0 +1,9 @@ +--- +html: http-websocket-apis-tutorials.html +parent: tutorials.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# HTTP / Websocket APIs + +XRPL tutorials for HTTP / Websocket APIs. \ No newline at end of file diff --git a/content/tutorials/java/index.md b/content/tutorials/java/index.md new file mode 100644 index 0000000000..e92ee1b269 --- /dev/null +++ b/content/tutorials/java/index.md @@ -0,0 +1,9 @@ +--- +html: java.html +parent: tutorials.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# Java + +XRPL tutorials in Java. \ No newline at end of file diff --git a/content/tutorials/javascript/index.md b/content/tutorials/javascript/index.md new file mode 100644 index 0000000000..f1b32a2345 --- /dev/null +++ b/content/tutorials/javascript/index.md @@ -0,0 +1,9 @@ +--- +html: javascript.html +parent: tutorials.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# JavaScript + +XRPL tutorials in JavaScript. \ No newline at end of file diff --git a/content/tutorials/javascript/modular-tutorials-in-javascript/index.md b/content/tutorials/javascript/modular-tutorials-in-javascript/index.md new file mode 100644 index 0000000000..46f3c517bb --- /dev/null +++ b/content/tutorials/javascript/modular-tutorials-in-javascript/index.md @@ -0,0 +1,9 @@ +--- +html: modular-tutorials-in-javascript.html +parent: javascript.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# Modular Tutorials in JavaScript + +Modular XRPL tutorials in JavaScript. \ No newline at end of file diff --git a/content/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md b/content/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md new file mode 100644 index 0000000000..8de2862798 --- /dev/null +++ b/content/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md @@ -0,0 +1,9 @@ +--- +html: nfts-using-javascript.html +parent: modular-tutorials-in-javascript.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# NFTs Using JavaScript + +Mint and sell NFTs on the XRP Ledger using JavaScript. \ No newline at end of file diff --git a/content/tutorials/python/index.md b/content/tutorials/python/index.md new file mode 100644 index 0000000000..601a6ea9b2 --- /dev/null +++ b/content/tutorials/python/index.md @@ -0,0 +1,9 @@ +--- +html: python.html +parent: tutorials.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# Python + +XRPL tutorials in Python. \ No newline at end of file diff --git a/content/tutorials/python/modular-tutorials-in-python/index.md b/content/tutorials/python/modular-tutorials-in-python/index.md new file mode 100644 index 0000000000..8cd1a663a6 --- /dev/null +++ b/content/tutorials/python/modular-tutorials-in-python/index.md @@ -0,0 +1,10 @@ +--- +html: modular-tutorials-in-python.html +parent: python.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Modular XRPL tutorials in Python. +--- +# Modular Tutorials in Python + +These tutorials take an incremental approach to implementing functionality, so you can reuse parts from the earlier tutorials on your way to making more advanced software. \ No newline at end of file diff --git a/content/tutorials/python/modular-tutorials-in-python/nfts-using-python/index.md b/content/tutorials/python/modular-tutorials-in-python/nfts-using-python/index.md new file mode 100644 index 0000000000..42d86ff43d --- /dev/null +++ b/content/tutorials/python/modular-tutorials-in-python/nfts-using-python/index.md @@ -0,0 +1,10 @@ +--- +html: nfts-using-python.html +parent: modular-tutorials-in-python.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Mint and sell NFTs on the XRP Ledger using Python. +--- +# NFTs Using Python + +Mint and sell NFTs on the XRP Ledger using Python. \ No newline at end of file diff --git a/content/tutorials/quickstart/assign-an-authorized-minter-using-javascript.md b/content/tutorials/quickstart/assign-an-authorized-minter-using-javascript.md index fdfbac79df..8b401478a2 100644 --- a/content/tutorials/quickstart/assign-an-authorized-minter-using-javascript.md +++ b/content/tutorials/quickstart/assign-an-authorized-minter-using-javascript.md @@ -46,6 +46,10 @@ To authorize another account to create NFTs for your account: ## Mint an NFT for Another Account +
+ +
+ This example uses the Operational account, which was authorized in the previous step, to mint a token on behalf of the Standby account. To mint a non-fungible token for another account: diff --git a/content/tutorials/quickstart/batch-mint-nfts-using-javascript.md b/content/tutorials/quickstart/batch-mint-nfts-using-javascript.md index fbc4ff7367..d0ded7ae9e 100644 --- a/content/tutorials/quickstart/batch-mint-nfts-using-javascript.md +++ b/content/tutorials/quickstart/batch-mint-nfts-using-javascript.md @@ -33,6 +33,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Batch Mint NFTs +
+ +
+ This example lets you mint multiple NFTs for a single unique item. The NFT might represent "prints" of an original artwork, tickets to an event, or another limited set of unique items. To batch mint a non-fungible token objects: diff --git a/content/tutorials/quickstart/broker-an-nft-sale-using-javascript.md b/content/tutorials/quickstart/broker-an-nft-sale-using-javascript.md index eaa600b681..53e1774712 100644 --- a/content/tutorials/quickstart/broker-an-nft-sale-using-javascript.md +++ b/content/tutorials/quickstart/broker-an-nft-sale-using-javascript.md @@ -41,6 +41,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Prepare a Brokered Transaction +
+ +
+ 1. Use the Standby account to create an NFT Sell Offer with the Broker account as the destination. 1. Enter the **Amount** of the sell offer in drops (millionths of an XRP). 2. Set the **Flags** field to _1_. diff --git a/content/tutorials/quickstart/create-accounts-send-xrp-using-javascript.md b/content/tutorials/quickstart/create-accounts-send-xrp-using-javascript.md index c9a04eeb85..d88cf98bad 100644 --- a/content/tutorials/quickstart/create-accounts-send-xrp-using-javascript.md +++ b/content/tutorials/quickstart/create-accounts-send-xrp-using-javascript.md @@ -34,6 +34,10 @@ Download and expand the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-p ## Usage +
+ +
+ To get test accounts: 1. Open `1.get-accounts-send-xrp.html` in a browser @@ -46,6 +50,10 @@ To get test accounts: You can transfer XRP between your new accounts. Each account has its own fields and buttons. +
+ +
+ To transfer XRP from the Standby account to the Operational account: 1. On the Standby (left) side of the form, enter the **Amount** of XRP to send. diff --git a/content/tutorials/quickstart/create-conditional-escrows-using-javascript.md b/content/tutorials/quickstart/create-conditional-escrows-using-javascript.md index a568eeb669..23e1c32a04 100644 --- a/content/tutorials/quickstart/create-conditional-escrows-using-javascript.md +++ b/content/tutorials/quickstart/create-conditional-escrows-using-javascript.md @@ -60,7 +60,11 @@ To get test accounts: ### Create Conditional Escrow: -When you create a conditional escrow, you need to specify the `Condition` value you generated above. You must also set a cancel date and time, after which the escrow is no longer available. +
+ +
+ +When you create a conditional escrow, you need to specify the amount you want to reserve and the `Condition` value you generated above. You can also set a cancel date and time, after which the escrow is no longer available. To create a conditional escrow: diff --git a/content/tutorials/quickstart/create-time-based-escrows-using-javascript.md b/content/tutorials/quickstart/create-time-based-escrows-using-javascript.md index 8c63619ccf..ebc6724479 100644 --- a/content/tutorials/quickstart/create-time-based-escrows-using-javascript.md +++ b/content/tutorials/quickstart/create-time-based-escrows-using-javascript.md @@ -43,6 +43,10 @@ To get test accounts: ## Create Escrow +
+ +
+ You can create a time-based escrow with a minimum time to finish the escrow and a cancel time after which the funds in escrow are no longer available to the recipient. This is a test harness: while a practical scenario might express time in days or weeks, this form lets you set the finish and cancel times in seconds so that you can quickly run through a variety of scenarios. (There are 86,400 seconds in a day, if you want to play with longer term escrows.) To create a time-based escrow: diff --git a/content/tutorials/quickstart/create-trustline-send-currency-using-javascript.md b/content/tutorials/quickstart/create-trustline-send-currency-using-javascript.md index 6ffb46ceb9..d2d4b11348 100644 --- a/content/tutorials/quickstart/create-trustline-send-currency-using-javascript.md +++ b/content/tutorials/quickstart/create-trustline-send-currency-using-javascript.md @@ -40,6 +40,10 @@ Open the Token Test Harness and get accounts: ## Create Trust Line +
+ +
+ To create a trust line between accounts: 1. Enter a [currency code](https://www.iban.com/currency-codes) in the **Currency** field. diff --git a/content/tutorials/quickstart/mint-and-burn-nfts-using-javascript.md b/content/tutorials/quickstart/mint-and-burn-nfts-using-javascript.md index 454d24785b..0032670b4c 100644 --- a/content/tutorials/quickstart/mint-and-burn-nfts-using-javascript.md +++ b/content/tutorials/quickstart/mint-and-burn-nfts-using-javascript.md @@ -13,7 +13,7 @@ This example shows how to: 1. Mint new Non-fungible Tokens (NFTs). 2. Get a list of existing NFTs. -3. Delete (Burn) a NFT. +3. Delete (Burn) an NFT. [![Test harness with mint NFT fields](img/quickstart8.png)](img/quickstart8.png) @@ -34,7 +34,11 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port [![Get accounts](img/quickstart9.png)](img/quickstart9.png) -## Mint a NFT +## Mint an NFT + +
+ +
To mint a non-fungible token object: @@ -54,9 +58,9 @@ Click **Get NFTs** to get a list of NFTs owned by the account. ## Burn a Token -The current owner of a NFT can always destroy (or _burn_) a NFT object. +The current owner of an NFT can always destroy (or _burn_) an NFT object. -To permanently destroy a NFT: +To permanently destroy an NFT: 1. Enter the **Token ID**. 2. Click **Burn NFT**. diff --git a/content/tutorials/quickstart/py-authorize-minter.md b/content/tutorials/quickstart/py-authorize-minter.md index fffc902ec1..c8c5549154 100644 --- a/content/tutorials/quickstart/py-authorize-minter.md +++ b/content/tutorials/quickstart/py-authorize-minter.md @@ -43,6 +43,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Authorize an Account to Create NFTs +
+ +
+ To authorize another account to create NFTs for your account (for example, allow the operational account to mint NFTs for the standby account): 1. Copy the **Operational Account** value. diff --git a/content/tutorials/quickstart/py-batch-minting.md b/content/tutorials/quickstart/py-batch-minting.md index 47b3f7029f..5aa4f01369 100644 --- a/content/tutorials/quickstart/py-batch-minting.md +++ b/content/tutorials/quickstart/py-batch-minting.md @@ -1,6 +1,6 @@ --- html: py-batch-minting.html -parent: quickstart-python.html +parent: nfts-using-python.html blurb: Mint multiple NFTs with the press of a button. labels: - Accounts @@ -28,20 +28,26 @@ You can download or clone the [Quickstart Samples](https://github.com/XRPLF/xrpl 1. If you want to use an existing account seed: 1. Paste the account seed in the **Standby Seed** field. 2. Click **Get Standby Account**. - 2. If you do not want to use an existing account seed, click **Get Standby Account**. + 2. If you do not want to use an existing account seed, just click **Get Standby Account**. +3. Click **Get Standby Account Info** to get the current XRP balance. ## Batch Mint NFTs +
+ +
+ This example lets you mint multiple NFTs for a single unique item. The NFT might represent "prints" of an original artwork, tickets to an event, or another limited set of unique items. To batch mint non-fungible token objects: -1. Set the **Flags** field. For testing purposes, we recommend setting the value to _8_. This sets the _tsTransferable_ flag, meaning that the NFT object can be transferred to another account. Otherwise, the NFT object can only be transferred back to the issuing account. See [NFTokenMint](nftokenmint.html) for available NFT minting flags. -2. Enter the **NFT URI**. This is a URI that points to the data or metadata associated with the NFT object. You can use the sample URI provided if you do not have one of your own. -3. Enter an **NFT Count** of up to 200 NFTs to create in one batch. -4. Enter the **Transfer Fee**, a percentage of the proceeds that the original creator receives from future sales of the NFT. This is a value of 0-50000 inclusive, allowing transfer fees between 0.000% and 50.000% in increments of 0.001%. If you do not set the **Flags** field to allow the NFT to be transferrable, set this field to 0. -5. Click **Batch Mint NFTs**. +1. Enter the **NFT URI**. This is a URI that points to the data or metadata associated with the NFT object. You can use this sample URI if you do not have one of your own: ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi. +2. Set the **Flags** field. For testing purposes, we recommend setting the value to _8_. This sets the _tsTransferable_ flag, meaning that the NFT object can be transferred to another account. Otherwise, the NFT object can only be transferred back to the issuing account. See [NFTokenMint](nftokenmint.html) for available NFT minting flags. +3. Enter the **Transfer Fee**, a percentage of the proceeds that the original creator receives from future sales of the NFT. This is a value of 0-50000 inclusive, allowing transfer fees between 0.000% and 50.000% in increments of 0.001%. If you do not set the **Flags** field to allow the NFT to be transferrable, set this field to 0. +4. Enter the **Taxon** for the NFT. If you do not have a need for the Taxon field, set this value to 0. +5. Enter an **NFT Count** of up to 200 NFTs to create in one batch. +6. Click **Batch Mint NFTs**. ## Get Batch NFTs @@ -235,11 +241,7 @@ import tkinter as tk import xrpl import json -from mod1 import get_account, get_account_info, send_xrp -from mod2 import ( - get_balance, - configure_account, -) +from mod1 import get_account, get_account_info ``` Import dependencies from `mod7.py`. @@ -265,17 +267,11 @@ def batch_mint_nfts(): text_standby_results.delete("1.0", tk.END) text_standby_results.insert("1.0", json.dumps(results, indent=4)) -def get_batch_nfts(): - results = get_batch(ent_standby_seed.get(), ent_standby_account.get()) - text_standby_results.delete("1.0", tk.END) - text_standby_results.insert("1.0",json.dumps(results, indent=4)) - -# Module 2 Handlers - -def standby_configure_account(): - results = configure_account( +def standby_get_batch_nfts(): + results = get_batch( ent_standby_seed.get(), - standbyRippling) + ent_standby_account.get() + ) text_standby_results.delete("1.0", tk.END) text_standby_results.insert("1.0", json.dumps(results, indent=4)) @@ -298,12 +294,10 @@ def get_standby_account_info(): Rename the window for Module 7. ```python -# Create a new window with the title "Quickstart Module 7" +# Create a new window with the title "Python Module - Batch Minting" window = tk.Tk() -window.title("Quickstart Module 7") +window.title("Python Module - Batch Minting") -standbyRippling = tk.BooleanVar() -operationalRippling = tk.BooleanVar() # Form frame @@ -315,11 +309,8 @@ lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") ent_standby_seed = tk.Entry(master=frm_form, width=50) lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") ent_standby_account = tk.Entry(master=frm_form, width=50) -lbl_standy_amount = tk.Label(master=frm_form, text="Amount") -ent_standby_amount = tk.Entry(master=frm_form, width=50) lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") ent_standby_balance = tk.Entry(master=frm_form, width=50) -cb_standby_allow_rippling = tk.Checkbutton(master=frm_form, text="Allow Rippling", variable=standbyRippling, onvalue=True, offvalue=False) lbl_standby_uri = tk.Label(master=frm_form, text="NFT URI") ent_standby_uri = tk.Entry(master=frm_form, width=50) lbl_standby_flags = tk.Label(master=frm_form, text="Flags") @@ -330,6 +321,8 @@ lbl_standby_taxon = tk.Label(master=frm_form, text="Taxon") ent_standby_taxon = tk.Entry(master=frm_form, width="50") lbl_standby_nft_id = tk.Label(master=frm_form, text="NFT ID") ent_standby_nft_id = tk.Entry(master=frm_form, width="50") +lbl_standby_nft_offer_index = tk.Label(master=frm_form, text="NFT Offer Index") +ent_standby_nft_offer_index = tk.Entry(master=frm_form, width="50") ``` Add the **NFT Count** field for batch minting. @@ -345,11 +338,8 @@ lbl_standy_seed.grid(row=0, column=0, sticky="w") ent_standby_seed.grid(row=0, column=1) lbl_standby_account.grid(row=2, column=0, sticky="e") ent_standby_account.grid(row=2, column=1) -lbl_standy_amount.grid(row=3, column=0, sticky="e") -ent_standby_amount.grid(row=3, column=1) lbl_standby_balance.grid(row=5, column=0, sticky="e") ent_standby_balance.grid(row=5, column=1) -cb_standby_allow_rippling.grid(row=7,column=1, sticky="w") lbl_standby_uri.grid(row=8, column=0, sticky="e") ent_standby_uri.grid(row=8, column=1, sticky="w") lbl_standby_flags.grid(row=9, column=0, sticky="e") @@ -358,8 +348,6 @@ lbl_standby_transfer_fee.grid(row=10, column=0, sticky="e") ent_standby_transfer_fee.grid(row=10, column=1, sticky="w") lbl_standby_taxon.grid(row=11, column=0, sticky="e") ent_standby_taxon.grid(row=11, column=1, sticky="w") -lbl_standby_nft_id.grid(row=12, column=0, sticky="e") -ent_standby_nft_id.grid(row=12, column=1, sticky="w") ``` Place the **NFT Count** field in the grid. @@ -369,7 +357,6 @@ lbl_standby_nft_count.grid(row=13, column=0, sticky="e") ent_standby_nft_count.grid(row=13, column=1, sticky="w") lbl_standby_results.grid(row=14, column=0, sticky="ne") text_standby_results.grid(row=14, column=1, sticky="nw") -cb_standby_allow_rippling.select() ############################################# ## Buttons ################################## @@ -383,22 +370,19 @@ btn_get_standby_account_info = tk.Button(master=frm_form, text="Get Standby Account Info", command = get_standby_account_info) btn_get_standby_account_info.grid(row=1, column=2, sticky = "nsew") -btn_standby_configure_account = tk.Button(master=frm_form, - text="Configure Account", - command = standby_configure_account) -btn_standby_configure_account.grid(row=7,column=0, sticky = "nsew") ``` Add the **Batch Mint NFTs** and **Get Batch NFTs** buttons. ```python -btn_standby_mint_token = tk.Button(master=frm_form, text="Batch Mint NFTs", - command = batch_mint_nfts) -btn_standby_mint_token.grid(row=8, column=2, sticky="nsew") -btn_standby_get_tokens = tk.Button(master=frm_form, text="Get Batch NFTs", - command = get_batch_nfts) -btn_standby_get_tokens.grid(row=9, column=2, sticky="nsew") - +btn_standby_batch_mint = tk.Button(master=frm_form, + text="Batch Mint NFTs", + command = standby_batch_mint) +btn_standby_batch_mint.grid(row=5, column=2, sticky = "nsew") +btn_standby_get_batch_nfts = tk.Button(master=frm_form, + text="Get Batch NFTs", + command = standby_get_batch_nfts) +btn_standby_get_batch_nfts.grid(row=8, column=2, sticky = "nsew") # Start the application window.mainloop() diff --git a/content/tutorials/quickstart/py-broker-sale.md b/content/tutorials/quickstart/py-broker-sale.md index 52906ca2d1..c5b29dfd68 100644 --- a/content/tutorials/quickstart/py-broker-sale.md +++ b/content/tutorials/quickstart/py-broker-sale.md @@ -48,6 +48,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Prepare a Brokered Transaction +
+ +
+ 1. Use the Standby account to create an NFT Sell Offer with the Broker account as the destination. 1. Enter the **Amount** of the sell offer in drops (millionths of an XRP). 2. Enter the **NFT ID** of the NFT you want to sell. diff --git a/content/tutorials/quickstart/py-create-accounts-send-xrp.md b/content/tutorials/quickstart/py-create-accounts-send-xrp.md index 0f36d47c86..cbd56c321e 100644 --- a/content/tutorials/quickstart/py-create-accounts-send-xrp.md +++ b/content/tutorials/quickstart/py-create-accounts-send-xrp.md @@ -34,6 +34,10 @@ Download and expand the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-p ## Usage +
+ +
+ To get test accounts: 1. Open and launch `lesson1-send-xrp.py`. @@ -47,6 +51,10 @@ To get test accounts: You can transfer XRP between your new accounts. Each account has its own fields and buttons. +
+ +
+ To transfer XRP from the Standby account to the Operational account: 1. On the Standby (left) side of the form, enter the **Amount** of XRP to send. diff --git a/content/tutorials/quickstart/py-create-conditional-escrows.md b/content/tutorials/quickstart/py-create-conditional-escrows.md new file mode 100644 index 0000000000..60bb98b077 --- /dev/null +++ b/content/tutorials/quickstart/py-create-conditional-escrows.md @@ -0,0 +1,608 @@ +--- +html: py-create-conditional-escrows.html +parent: send-payments-using-python.html +blurb: Create, finish, or cancel condition-based escrow transactions. +labels: + - Accounts + - Quickstart + - Transaction Sending + - XRP +--- +# Create Conditional Escrows Using Python + +This example shows how to: + +1. Create escrow payments that become available when an account enters a fulfillment code. + +2. Complete a conditional escrow transaction. + +3. Cancel a conditional escrow transaction. + +[![Conditional Escrow Tester Form](img/quickstart-py-conditional-escrow-1.png)](img/quickstart-py-conditional-escrow-1.png) + + +## Prerequisites + +Download and expand the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/py/){.github-code-download} archive. + +You need the `cryptoconditions` module to generate your condition/fulfillment pair. You can install the module using [pip](https://pip.pypa.io/en/stable/). + +In a terminal window, install the `cryptoconditions` module with this command: + +```bash +pip install cryptoconditions +``` + +## Usage + +### Get Test Accounts + +To get test accounts: + +1. Open and run `lesson9-conditional-escrow.py`. +2. Get test accounts. + 1. If you have existing account seeds + 1. Paste Standby account seed in the **Standby Seed** field. + 2. Click **Get Standby Account**. + 3. Click **Get Standby Account Info**. + 4. Paste Operational account seed in the **Operational Seed** field. + 5. Click **Get Operational Account**. + 6. Click **Get Op Account Info**. + 2. If you do not have account seeds: + 1. Click **Get Standby Account**. + 2. Click **Get Standby Account Info**. + 3. Click **Get Operational Account**. + 4. Click **Get Op Account Info**. + +[![Escrow Example with Account Information](img/quickstart-py-conditional-escrow-2.png)](img/quickstart-py-conditional-escrow-2.png) + +#### Get a Condition and Fulfillment + +Click **Get Condition** to generate a condition/fulfillment pair and populate the fields on the form. You can copy the values and store them in a text file for safe keeping. + +[![Escrow Example with Condition and Fulfillment](img/quickstart-py-conditional-escrow-3.png)](img/quickstart-py-conditional-escrow-3.png) + +### Create Conditional Escrow + +
+ +
+ +When you create a conditional escrow, you need to specify the `Condition` value you generated above. You must also set a cancel date and time, after which the escrow is no longer available. + +To create a conditional escrow: + +1. Enter an **Amount** to transfer. +2. Copy the **Operational Account** value. +3. Paste it in the **Destination Account** field. +4. Enter the **Escrow Cancel (seconds)** value. +5. Click **Create Escrow**. +6. Copy and save the _Sequence Number_ of the escrow called out in the **Standby Result** field. + +The escrow is created on the XRP Ledger instance, reserving your requested XRP amount plus the transaction cost. + +When you create an escrow, capture and save the _Sequence Number_ so that you can use it to finish the escrow transaction. + +[![Created Escrow Transaction](img/quickstart-py-conditional-escrow-4.png)](img/quickstart-py-conditional-escrow-4.png) + +## Finish Conditional Escrow + +Any account can finish the conditional escrow any time before the _Escrow Cancel_ time. Following on the example above, you can use the _Sequence Number_ to finish the transaction once the Escrow Cancel time has passed. + +To finish a conditional escrow: + +1. Paste the sequence number in the Operational account **Sequence Number** field. +2. Enter the **Escrow Condition** value. +3. Enter the **Escrow Fulfillment** code for the `Condition`. +4. Copy the **Standby Account** value. +5. Paste it into the **Escrow Owner** field. +4. Click **Finish Conditional Escrow**. + +The transaction completes and balances are updated for both the Standby and Operational accounts. + +[![Finished Escrow Transaction](img/quickstart-py-conditional-escrow-5.png)](img/quickstart-py-conditional-escrow-5.png) + +## Get Escrows + +Click **Get Escrows** for either the Standby account or the Operational account to see their current list of escrows. + +## Cancel Escrow + +When the Escrow Cancel time passes, the escrow is no longer available to the recipient. The initiator of the escrow can reclaim the XRP, less the transaction fees. Any account can cancel an escrow once the cancel time has elapsed. Accounts that try to cancel the transaction prior to the **Escrow Cancel** time are charged the nominal transaction cost (about 10-15 drops), but the actual escrow cannot be cancelled until after the Escrow Cancel time. + +## Oh No! I Forgot to Save the Sequence Number! + +If you forget to save the sequence number, you can find it in the escrow transaction record. + +1. Create a new escrow as described in [Create Conditional Escrow](#create-conditional-escrow), above. +2. Click **Get Escrows** to get the escrow information. +3. Copy the _PreviousTxnLgrSeq_ value from the results. + ![Transaction ID in Get Escrows results](img/quickstart-py-conditional-escrow-6.png) +4. Paste the _PreviousTxnLgrSeq_ in the **Transaction to Look Up** field. + ![Transaction to Look Up field](img/quickstart-py-conditional-escrow-7.png) +5. Click **Get Transaction**. +6. Locate the _Sequence_ value in the results. + +![Sequence number in results](img/quickstart-py-conditional-escrow-8.png) + +# Code Walkthrough + +You can download the [Modular Tutorials](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/py/){.github-code-download} in the source repository for this website. + +## mod9.py + +Import dependencies. + +```python +import xrpl +from xrpl.clients import JsonRpcClient +from xrpl.wallet import Wallet +from datetime import datetime +from xrpl.models.transactions import EscrowCreate, EscrowFinish +from os import urandom +from cryptoconditions import PreimageSha256 +``` + +Create a global variable pointing to Testnet. + +```python +testnet_url = "https://s.altnet.rippletest.net:51234" +``` + +### generate_condition + +Generate the _condition_ and _fulfillment_ values for the escrow. + +```python +def generate_condition(): +``` + +Set a variable to 32 random bytes. + +```python + randy = urandom(32) +``` + +Use the 32-byte random variable as the argument for the `PreimageSha256` functino. + +```python + fulfillment = PreimageSha256(preimage=randy) +``` + +Return the binary condition and the binary serialized (fulfillment) value. + +```python + return (fulfillment.condition_binary.hex().upper(), + fulfillment.serialize_binary().hex().upper()) +``` + +### add_seconds + +Create a date in the Ripple epoch, adding the specified number of seconds. + +```python +def add_seconds(numOfSeconds): +``` + +Create a new_date variable. + +```python + new_date = datetime.now() +``` + +Convert the date to a Ripple time object. + +```python + if new_date != '': + new_date = xrpl.utils.datetime_to_ripple_time(new_date) +``` + +Add the requested seconds to the Ripple formatted date variable. + +```python + new_date = new_date + int(numOfSeconds) +``` + +Return the result. + +```python + return new_date +``` + +### create_conditional_escrow + +You create conditional escrows using the same **EscrowCreate** model you used for a time-based escrow, but instead of a finish time, you provide a condition that must be met to complete the transaction. + +Pass the _seed_ for the sending account, the _amount_ to hold in escrow, the _destination_ account to receive the escrow funds, the number of seconds until the escrow will _cancel_, and a _condition_ value that will be matched with a _fulfillment_ value to complete the escrow. + +```python +def create_conditional_escrow(seed, amount, destination, cancel, condition): +``` + +Instantiate a wallet and connect to Testnet. + +```python + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) +``` + +Create a *cancel_date* variable, adding your specified number of seconds to the current Ripple epoch date. + +```python + cancel_date = add_seconds(cancel) +``` + +Define the transaction with your provided values. + +```python + escrow_tx=xrpl.models.transactions.EscrowCreate( + account=wallet.address, + amount=amount, + destination=destination, + cancel_after=cancel_date, + condition=condition + ) +``` + +Submit the transaction and return the results. + +```python + reply="" + try: + response=xrpl.transaction.submit_and_wait(escrow_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply +``` + +### finish_conditional_escrow + +At any time prior to the cancel date, the destination account can fulfill the escrow. + +Pass the _seed_ for the receiving account, the _owner_ (sending account), the _sequence_ number for the escrow, the _condition_ value, and the matching _fulfillment_ value. + +```python +def finish_conditional_escrow(seed, owner, sequence, condition, fulfillment): +``` + +Instantiate the account wallet and connect to Testnet. + +```python + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) +``` + +Define the **EscrowFinish** transaction, including both the condition and the fulfillment values. + +```python + finish_tx=xrpl.models.transactions.EscrowFinish( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence), + condition=condition, + fulfillment=fulfillment + ) +``` + +Submit the transaction and report the results. + +```python + reply="" + try: + response=xrpl.transaction.submit_and_wait(finish_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply +``` + +## lesson9-conditional-escrow.py + +This example builds on `lesson8-time-escrow.py` to reuse fields, buttons, and functions that apply to both time-based and conditional escrows. Updates are highlighted below. + +```python +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info, send_xrp +from mod8 import get_escrows, cancel_time_escrow, get_transaction +``` + +Import new functions for conditional escrows from module 9. + +```python +from mod9 import create_conditional_escrow, finish_conditional_escrow, generate_condition + +``` + +Add handlers for creating and finishing conditional escrows. + +```python +def get_condition(): + results = generate_condition() + ent_standby_escrow_condition.delete(0, tk.END) + ent_standby_escrow_condition.insert(0, results[0]) + ent_operational_escrow_fulfillment.delete(0, tk.END) + ent_operational_escrow_fulfillment.insert(0, results[1]) + +def standby_create_conditional_escrow(): + results = create_conditional_escrow( + ent_standby_seed.get(), + ent_standby_amount.get(), + ent_standby_destination.get(), + ent_standby_escrow_cancel.get(), + ent_standby_escrow_condition.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_finish_conditional_escrow(): + results = finish_conditional_escrow( + ent_operational_seed.get(), + ent_operational_escrow_owner.get(), + ent_operational_sequence_number.get(), + ent_standby_escrow_condition.get(), + ent_operational_escrow_fulfillment.get() + ) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 8 Handlers + +def operational_get_escrows(): + results = get_escrows(ent_operational_account.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_cancel_time_escrow(): + results = cancel_time_escrow( + ent_standby_seed.get(), + ent_standby_escrow_owner.get(), + ent_standby_escrow_sequence_number.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_transaction(): + results = get_transaction(ent_operational_account.get(), + ent_operational_look_up.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 1 Handlers + +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def standby_send_xrp(): + response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(), + ent_standby_destination.get()) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(response.result, indent=4)) + get_standby_account_info() + get_operational_account_info() + + +def get_operational_account(): + new_wallet = get_account(ent_operational_seed.get()) + ent_operational_account.delete(0, tk.END) + ent_operational_account.insert(0, new_wallet.classic_address) + ent_operational_seed.delete(0, tk.END) + ent_operational_seed.insert(0, new_wallet.seed) + + +def get_operational_account_info(): + accountInfo = get_account_info(ent_operational_account.get()) + ent_operational_balance.delete(0, tk.END) + ent_operational_balance.insert(0,accountInfo['Balance']) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def operational_send_xrp(): + response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), + ent_operational_destination.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(response.result,indent=4)) + get_standby_account_info() + get_operational_account_info() +``` + +Rename the window. + +```python +window = tk.Tk() +window.title("Conditional Escrow Example") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standy_amount = tk.Label(master=frm_form, text="Amount") +ent_standby_amount = tk.Entry(master=frm_form, width=50) +lbl_standby_destination = tk.Label(master=frm_form, text="Destination") +ent_standby_destination = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) +``` + +Add a field for the escrow condition. + +```python +lbl_standby_escrow_condition = tk.Label(master=frm_form, text="Escrow Condition") +ent_standby_escrow_condition = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_cancel = tk.Label(master=frm_form, text="Escrow Cancel (seconds)") +ent_standby_escrow_cancel = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_standby_escrow_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_owner = tk.Label(master=frm_form, text="Escrow Owner") +ent_standby_escrow_owner = tk.Entry(master=frm_form, width=50) +lbl_standby_results = tk.Label(master=frm_form, text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + +# Place fields in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="e") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standy_amount.grid(row=3, column=0, sticky="e") +ent_standby_amount.grid(row=3, column=1) +lbl_standby_destination.grid(row=4, column=0, sticky="e") +ent_standby_destination.grid(row=4, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +``` + +Insert the condition field in the standby grid. + +```python +lbl_standby_escrow_condition.grid(row=6, column=0, sticky="e") +ent_standby_escrow_condition.grid(row=6, column=1) +lbl_standby_escrow_cancel.grid(row=7, column=0, sticky="e") +ent_standby_escrow_cancel.grid(row=7, column=1) +lbl_standby_escrow_sequence_number.grid(row=8, column=0, sticky="e") +ent_standby_escrow_sequence_number.grid(row=8, column=1) +lbl_standby_escrow_owner.grid(row=9, column=0, sticky="e") +ent_standby_escrow_owner.grid(row=9, column=1) +lbl_standby_results.grid(row=10, column=0, sticky="ne") +text_standby_results.grid(row=10, column=1, sticky="nw") + +############################################### +## Operational Account ######################## +############################################### + +# Create the Label and Entry widgets for "Operational Account" +lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed") +ent_operational_seed = tk.Entry(master=frm_form, width=50) +lbl_operational_account = tk.Label(master=frm_form, text="Operational Account") +ent_operational_account = tk.Entry(master=frm_form, width=50) +lbl_operational_amount = tk.Label(master=frm_form, text="Amount") +ent_operational_amount = tk.Entry(master=frm_form, width=50) +lbl_operational_destination = tk.Label(master=frm_form, text="Destination") +ent_operational_destination = tk.Entry(master=frm_form, width=50) +lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_operational_balance = tk.Entry(master=frm_form, width=50) +``` + +Add a field for the escrow fulfillment value. + +```python +lbl_operational_escrow_fulfillment = tk.Label(master=frm_form, text="Escrow Fulfillment") +ent_operational_escrow_fulfillment = tk.Entry(master=frm_form, width=50) +lbl_operational_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_operational_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_owner=tk.Label(master=frm_form, text="Escrow Owner") +ent_operational_escrow_owner=tk.Entry(master=frm_form, width=50) +lbl_operational_look_up = tk.Label(master=frm_form, text="Transaction to Look Up") +ent_operational_look_up = tk.Entry(master=frm_form, width=50) +lbl_operational_results = tk.Label(master=frm_form,text='Results') +text_operational_results = tk.Text(master=frm_form, height = 20, width = 65) + + +#Place the widgets in a grid +lbl_operational_seed.grid(row=0, column=4, sticky="e") +ent_operational_seed.grid(row=0, column=5, sticky="w") +lbl_operational_account.grid(row=2,column=4, sticky="e") +ent_operational_account.grid(row=2,column=5, sticky="w") +lbl_operational_amount.grid(row=3, column=4, sticky="e") +ent_operational_amount.grid(row=3, column=5, sticky="w") +lbl_operational_destination.grid(row=4, column=4, sticky="e") +ent_operational_destination.grid(row=4, column=5, sticky="w") +lbl_operational_balance.grid(row=5, column=4, sticky="e") +ent_operational_balance.grid(row=5, column=5, sticky="w") +``` + +Insert the **Fulfillment** field in the operational grid, moving the other fields down so as to align the **Condition** and **Fulfillment** fields horizontally. + +```python +lbl_operational_escrow_fulfillment.grid(row=6, column=4, sticky="e") +ent_operational_escrow_fulfillment.grid(row=6, column=5, sticky="w") +lbl_operational_sequence_number.grid(row=7, column=4, sticky="e") +ent_operational_sequence_number.grid(row=7, column=5, sticky="w") +lbl_operational_escrow_owner.grid(row=8, column=4, sticky="e") +ent_operational_escrow_owner.grid(row=8, column=5, sticky="w") +lbl_operational_look_up.grid(row=9, column=4, sticky="e") +ent_operational_look_up.grid(row=9, column=5, sticky="w") +lbl_operational_results.grid(row=10, column=4, sticky="ne") +text_operational_results.grid(row=10, column=5, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Get Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row = 0, column = 2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row = 1, column = 2, sticky = "nsew") +btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >", + command = standby_send_xrp) +btn_standby_send_xrp.grid(row = 2, column = 2, sticky = "nsew") +``` + +Add a **Create Conditional Escrow** button to the Standby grid. + +```python +btn_standby_get_condition = tk.Button(master=frm_form, text="Get Condition", + command = get_condition) +btn_standby_get_condition.grid(row=4, column=2, sticky="nsew") +btn_standby_create_escrow = tk.Button(master=frm_form, text="Create Conditional Escrow", + command = standby_create_conditional_escrow) +btn_standby_create_escrow.grid(row=5, column = 2, sticky="nsew") +btn_standby_cancel_escrow = tk.Button(master=frm_form, text="Cancel Escrow", + command = standby_cancel_time_escrow) +btn_standby_cancel_escrow.grid(row=6,column = 2, sticky="nsew") + +# Create the Operational Account Buttons +btn_get_operational_account = tk.Button(master=frm_form, + text="Get Operational Account", + command = get_operational_account) +btn_get_operational_account.grid(row=0, column=3, sticky = "nsew") +btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info", + command = get_operational_account_info) +btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew") +btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP", + command = operational_send_xrp) +btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew") +``` + +Add a **Finish Escrow** button to the operational grid. + +```python +btn_op_finish_escrow = tk.Button(master=frm_form, text="Finish Escrow", + command = operational_finish_conditional_escrow) +btn_op_finish_escrow.grid(row = 4, column = 3, sticky="nsew") +btn_op_get_escrows = tk.Button(master=frm_form, text="Get Escrows", + command = operational_get_escrows) +btn_op_get_escrows.grid(row = 5, column = 3, sticky="nsew") +btn_op_get_transaction = tk.Button(master=frm_form, text="Get Transaction", + command = operational_get_transaction) +btn_op_get_transaction.grid(row = 6, column = 3, sticky = "nsew") + +# Start the application +window.mainloop() +``` + diff --git a/content/tutorials/quickstart/py-create-time-based-escrows.md b/content/tutorials/quickstart/py-create-time-based-escrows.md new file mode 100644 index 0000000000..7ea2adc823 --- /dev/null +++ b/content/tutorials/quickstart/py-create-time-based-escrows.md @@ -0,0 +1,637 @@ +--- +html: py-create-time-based-escrows.html +parent: send-payments-using-python.html +blurb: Create, finish, or cancel time-based escrow transactions. +labels: + - Accounts + - Quickstart + - Transaction Sending + - XRP +--- +# Create Time-based Escrows Using Python + +This example shows how to: + + +1. Create escrow payments that become available at a specified time and expire at a specified time. +2. Finish an escrow payment. +3. Retrieve information on escrows attached to an account. +3. Cancel an escrow payment and return the XRP to the sending account. + + +[![Escrow Tester Form](img/quickstart-py-escrow1.png)](img/quickstart-py-escrow1.png) + +## Prerequisites + +Download the [Python Modular Code Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/py/){.github-code-download}. + +## Usage + +To get test accounts: + +1. Open `lesson8-time-escrow.py.` +2. Get test accounts. + 1. If you have existing account seeds + 1. Paste Standby account seed in the **Standby Seed** field. + 2. Click **Get Standby Account**. + 3. Click **Get Standby Account Info**. + 4. Paste Operational account seed in the **Operational Seed** field. + 5. Click **Get Operational Account**. + 6. Click **Get Op Account Info**. + 2. If you do not have account seeds: + 1. Click **Get Standby Account**. + 2. Click **Get Standby Account Info**. + 3. Click **Get Operational Account**. + 4. Click **Get Op Account Info**. + +[![Escrow Tester with Account Information](img/quickstart-escrow2.png)](img/quickstart-py-escrow2.png) + +## Create Escrow + +
+ +
+ +You can create a time-based escrow with a minimum time to finish the escrow and a cancel time after which the funds in escrow are no longer available to the recipient. This is a test harness: while a practical scenario might express time in days or weeks, this form lets you set the finish and cancel times in seconds so that you can quickly run through a variety of scenarios. (There are 86,400 seconds in a day, if you want to play with longer term escrows.) + +To create a time-based escrow: + +1. Enter an **Amount** to transfer. For example, _100000000_. +2. Copy the **Operational Account** value. +3. Paste it in the **Destination Account** field. +4. Set the **Escrow Finish (seconds)** value. For example, enter _10_. +5. Set the **Escrow Cancel (seconds)** value. For example, enter _120_. +6. Click **Create Time-based Escrow**. +7. Copy the _Sequence Number_ of the escrow called out in the **Standby Result** field. + +The escrow is created on the XRP Ledger instance, reserving 100 XRP plus the transaction cost and reserve requirements. When you create an escrow, capture and save the **Sequence Number** so that you can use it to finish the escrow transaction. + +[![Completed Create Escrow Transaction](img/quickstart-py-escrow3.png)](img/quickstart-py-escrow3.png) + +## Finish Escrow + +The recipient of the XRP held in escrow can finish the transaction any time within the time window after the Escrow Finish date and time but before the Escrow Cancel date and time. Following on the example above, you can use the _Sequence Number_ to finish the transaction once 10 seconds have passed. + +To finish a time-based escrow: + +1. Paste the sequence number in the Operational account **Sequence Number** field. +2. Click **Finish Escrow**. +3. Click **Get Op Account Info** and **Get Standby Account Info** to update their **XRP Balance**. + +The transaction completes and balances are updated for both the Standby and Operational accounts. + +[![Completed Escrow Transaction](img/quickstart-py-escrow4.png)](img/quickstart-py-escrow4.png) + +## Get Escrows + +Click **Get Escrows** to see the current list of escrows for the Operational account. If you click the button now, there are no escrows at the moment. + +For the purposes of this tutorial, you can follow the steps in [Create Escrow](#create-escrow), above, to create a new escrow transaction that you can then look up. Remember to capture the _Sequence Number_ from the transaction results. + +[![Get Escrows results](img/quickstart-py-escrow5.png)](img/quickstart-py-escrow5.png) + + +## Cancel Escrow + +When the Escrow Cancel time passes, the escrow is no longer available to the recipient. The initiator of the escrow can reclaim the XRP. If you try to cancel the transaction prior to the **Escrow Cancel** time, you are charged for the transaction, but the actual escrow cannot be cancelled until the time limit is reached. + +You can wait the allotted time for the escrow you created in the previous step, then use it to try out the **Cancel Escrow** button + +To cancel an expired escrow: + +1. Enter the sequence number in the Standby **Sequence Number** field. +2. Copy the **Standby Account** value and paste it in the **Escrow Owner** field. +2. Click **Cancel Time-based Escrow**. + +The funds are returned to the Standby account, less the initial transaction fee. + +[![Cancel Escrow results](img/quickstart-py-escrow6.png)](img/quickstart-py-escrow6.png) + +## Oh No! I Forgot to Save the Sequence Number! + +If you forget to save the sequence number, you can find it in the escrow transaction record. + +1. Create a new escrow as described in [Create Escrow](#create-escrow), above. +2. Click **Get Escrows** to get the escrow information. +3. Copy the _PreviousTxnLgrSeq_ value from the results. + ![Transaction ID in Get Escrows results](img/quickstart-py-escrow7.png) +4. Paste the _PreviousTxnLgrSeq_ in the **Transaction to Look Up** field. +5. Click **Get Transaction**. +6. Locate the _Sequence_ value in the results. + ![Sequence number in results](img/quickstart-py-escrow8.png) + +# Code Walkthrough + +You can download the [Python Modular Code Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/py/){.github-code-download} in the source repository for this website. + +## mod8.py + +This example can be used with the XRP Ledger network, _Testnet_. You can update the code to choose different or additional XRP Ledger networks. + +### add_seconds + +This function accomplishes two things. It creates a new date object and adds the number of seconds taken from a form field. Then, it adjusts the date from the Python format to the XRP Ledger format. + +Provide the _numOfSeconds_ argument. + +```python +def add_seconds(numOfSeconds): +``` + +Create a new Python date object. + +```python + new_date = datetime.now() +``` + +Convert the date variable for the Ripple epoch. + +```python + if new_date != '': + new_date = xrpl.utils.datetime_to_ripple_time(new_date) +``` + +Add your seconds to the date. + +```python + new_date = new_date + int(numOfSeconds) +``` + +Return the resulting date value. + +```python + return new_date +``` + +### create_time_escrow + +Call the create_time_escrow function, passing the _seed_, _amount_, _destination_, _finish_ interval, and _cancel_ interval. + +```python +def create_time_escrow(seed, amount, destination, finish, cancel): +``` + +Get the client wallet. + +```python + wallet=Wallet.from_seed(seed) +``` + +Connect to Testnet. + +```python + client=JsonRpcClient(testnet_url) +``` + +Create variables for the finish and cancel dates using the add_seconds function. + +```python + finish_date = add_seconds(finish) + cancel_date = add_seconds(cancel) +``` + +Define the **EscrowCreate** transaction. + +```python + escrow_tx=xrpl.models.transactions.EscrowCreate( + account=wallet.address, + amount=amount, + destination=destination, + finish_after=finish_date, + cancel_after=cancel_date + ) +``` + +Submit the transaction and report the results. + +```python + reply="" + try: + response=xrpl.transaction.submit_and_wait(escrow_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply +``` + +### finish_time_escrow + +Pass the operational account _seed_, escrow _owner_ (in these examples, the standby address), and the escrow _sequence_ number. + +```python +def finish_time_escrow(seed, owner, sequence): +``` + +Instantiate the wallet and client. + +```python + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) +``` + +Define the **EscrowFinish** transaction. + +```python + finish_tx=xrpl.models.transactions.EscrowFinish( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) +``` + +Submit the transaction and report the results. + +```python + reply="" + try: + response=xrpl.transaction.submit_and_wait(finish_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply +``` + +### get_escrows + +This request only requires the _account_ argument. + +```python +def get_escrows(account): +``` + +Since this is a request, there's no need to sign in with an account to perform the query. You can just instantiate a client on Testnet. + +```python + client=JsonRpcClient(testnet_url) +``` + +Define the **AccountObjects** request, specifying objects of type _escrow_. + +```python + acct_escrows=AccountObjects( + account=account, + ledger_index="validated", + type="escrow" + ) +``` + +Submit the request and return the results. + +```python + response=client.request(acct_escrows) + return response.result +``` + +### cancel_time_escrows + +Pass the issuer account _seed_, the _owner_ account, and the escrow _sequence_ number. + +```python +def cancel_time_escrow(seed, owner, sequence): +``` + +Get the wallet and instantiate a client on _Testnet_. + +```python + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) +``` + +Define the cancel transaction + +```python + cancel_tx=xrpl.models.transactions.EscrowCancel( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) +``` + +Submit the transaction and report the results + +```python + reply="" + try: + response=xrpl.transaction.submit_and_wait(cancel_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply +``` + +### get_transaction + +Pass the requesting account number and the previous transaction ledger sequence number. + +```python +def get_transaction(account, ledger_index): +``` + +Create a client instance. + +```python + client=JsonRpcClient(testnet_url) +``` + +Create the **AccountTx** request. + +```python + tx_info=AccountTx( + account=account, + ledger_index=int(ledger_index) + ) +``` + +Send the request and report the results. + +```python + response=client.request(tx_info) + return response.result +``` + +## lesson8-time-escrow.py + +This module builds on `lesson1-send-xrp.py`. Changes are noted below. + +```python +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info, send_xrp +``` + +Import new functions from mod8.py. + +```python +from mod8 import create_time_escrow, finish_time_escrow, get_escrows, cancel_time_escrow, get_transaction +``` + +Module 8 Handlers + +```python +def standby_create_time_escrow(): + results = create_time_escrow( + ent_standby_seed.get(), + ent_standby_amount.get(), + ent_standby_destination.get(), + ent_standby_escrow_finish.get(), + ent_standby_escrow_cancel.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_finish_time_escrow(): + results = finish_time_escrow( + ent_operational_seed.get(), + ent_operational_escrow_owner.get(), + ent_operational_sequence_number.get() + ) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_escrows(): + results = get_escrows(ent_operational_account.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_cancel_time_escrow(): + results = cancel_time_escrow( + ent_standby_seed.get(), + ent_standby_escrow_owner.get(), + ent_standby_escrow_sequence_number.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_transaction(): + results = get_transaction(ent_operational_account.get(), + ent_operational_look_up.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 1 Handlers + +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def standby_send_xrp(): + response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(), + ent_standby_destination.get()) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(response.result, indent=4)) + get_standby_account_info() + get_operational_account_info() + + +def get_operational_account(): + new_wallet = get_account(ent_operational_seed.get()) + ent_operational_account.delete(0, tk.END) + ent_operational_account.insert(0, new_wallet.classic_address) + ent_operational_seed.delete(0, tk.END) + ent_operational_seed.insert(0, new_wallet.seed) + + +def get_operational_account_info(): + accountInfo = get_account_info(ent_operational_account.get()) + ent_operational_balance.delete(0, tk.END) + ent_operational_balance.insert(0,accountInfo['Balance']) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def operational_send_xrp(): + response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), + ent_operational_destination.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(response.result,indent=4)) + get_standby_account_info() + get_operational_account_info() + + +# Create a new window with the title "Quickstart Module 1" +window = tk.Tk() +window.title("Time-based Escrow Example") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standy_amount = tk.Label(master=frm_form, text="Amount") +ent_standby_amount = tk.Entry(master=frm_form, width=50) +lbl_standby_destination = tk.Label(master=frm_form, text="Destination") +ent_standby_destination = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) +``` + +Add supporting fields for escrow commands. + +```python +lbl_standby_escrow_finish = tk.Label(master=frm_form, text="Escrow Finish (seconds)") +ent_standby_escrow_finish = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_cancel = tk.Label(master=frm_form, text="Escrow Cancel (seconds)") +ent_standby_escrow_cancel = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_standby_escrow_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_owner = tk.Label(master=frm_form, text="Escrow Owner") +ent_standby_escrow_owner = tk.Entry(master=frm_form, width=50) +lbl_standby_results = tk.Label(master=frm_form, text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + +# Place fields in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="e") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standy_amount.grid(row=3, column=0, sticky="e") +ent_standby_amount.grid(row=3, column=1) +lbl_standby_destination.grid(row=4, column=0, sticky="e") +ent_standby_destination.grid(row=4, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +``` + +Add supporting fields for escrow to the standby side of the form. + +```python +lbl_standby_escrow_finish.grid(row=6, column=0, sticky="e") +ent_standby_escrow_finish.grid(row=6, column=1) +lbl_standby_escrow_cancel.grid(row=7, column=0, sticky="e") +ent_standby_escrow_cancel.grid(row=7, column=1) +lbl_standby_escrow_sequence_number.grid(row=8, column=0, sticky="e") +ent_standby_escrow_sequence_number.grid(row=8, column=1) +lbl_standby_escrow_owner.grid(row=9, column=0, sticky="e") +ent_standby_escrow_owner.grid(row=9, column=1) +lbl_standby_results.grid(row=10, column=0, sticky="ne") +text_standby_results.grid(row=10, column=1, sticky="nw") + +############################################### +## Operational Account ######################## +############################################### + +# Create the Label and Entry widgets for "Operational Account" +lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed") +ent_operational_seed = tk.Entry(master=frm_form, width=50) +lbl_operational_account = tk.Label(master=frm_form, text="Operational Account") +ent_operational_account = tk.Entry(master=frm_form, width=50) +lbl_operational_amount = tk.Label(master=frm_form, text="Amount") +ent_operational_amount = tk.Entry(master=frm_form, width=50) +lbl_operational_destination = tk.Label(master=frm_form, text="Destination") +ent_operational_destination = tk.Entry(master=frm_form, width=50) +lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_operational_balance = tk.Entry(master=frm_form, width=50) +``` + +Define escrow supporting fields for the operational side of the form. + +```python +lbl_operational_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_operational_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_owner=tk.Label(master=frm_form, text="Escrow Owner") +ent_operational_escrow_owner=tk.Entry(master=frm_form, width=50) +lbl_operational_look_up = tk.Label(master=frm_form, text="Transaction to Look Up") +ent_operational_look_up = tk.Entry(master=frm_form, width=50) +lbl_operational_results = tk.Label(master=frm_form,text='Results') +text_operational_results = tk.Text(master=frm_form, height = 20, width = 65) + +#Place the widgets in a grid +lbl_operational_seed.grid(row=0, column=4, sticky="e") +ent_operational_seed.grid(row=0, column=5, sticky="w") +lbl_operational_account.grid(row=2,column=4, sticky="e") +ent_operational_account.grid(row=2,column=5, sticky="w") +lbl_operational_amount.grid(row=3, column=4, sticky="e") +ent_operational_amount.grid(row=3, column=5, sticky="w") +lbl_operational_destination.grid(row=4, column=4, sticky="e") +ent_operational_destination.grid(row=4, column=5, sticky="w") +lbl_operational_balance.grid(row=5, column=4, sticky="e") +ent_operational_balance.grid(row=5, column=5, sticky="w") +``` + +Add supporting fields for escrow to the operational side of the form. + +```python +lbl_operational_sequence_number.grid(row=6, column=4, sticky="e") +ent_operational_sequence_number.grid(row=6, column=5, sticky="w") +lbl_operational_escrow_owner.grid(row=7, column=4, sticky="e") +ent_operational_escrow_owner.grid(row=7, column=5, sticky="w") +lbl_operational_look_up.grid(row=8, column=4, sticky="e") +ent_operational_look_up.grid(row=8, column=5, sticky="w") +lbl_operational_results.grid(row=10, column=4, sticky="ne") +text_operational_results.grid(row=10, column=5, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Get Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row = 0, column = 2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row = 1, column = 2, sticky = "nsew") +btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >", + command = standby_send_xrp) +btn_standby_send_xrp.grid(row = 2, column = 2, sticky = "nsew") +``` + +Add buttons for escrow activity on the standby side of the form. + +```python +btn_standby_create_escrow = tk.Button(master=frm_form, text="Create Time-based Escrow", + command = standby_create_time_escrow) +btn_standby_create_escrow.grid(row = 4, column = 2, sticky="nsew") +btn_standby_cancel_escrow = tk.Button(master=frm_form, text="Cancel Time-based Escrow", + command = standby_cancel_time_escrow) +btn_standby_cancel_escrow.grid(row=5,column = 2, sticky="nsew") + +# Create the Operational Account Buttons +btn_get_operational_account = tk.Button(master=frm_form, + text="Get Operational Account", + command = get_operational_account) +btn_get_operational_account.grid(row=0, column=3, sticky = "nsew") +btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info", + command = get_operational_account_info) +btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew") +btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP", + command = operational_send_xrp) +btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew") +``` + +Add buttons to support escrow activity on the operational side of the form. + +```python +btn_op_finish_escrow = tk.Button(master=frm_form, text="Finish Escrow", + command = operational_finish_time_escrow) +btn_op_finish_escrow.grid(row = 4, column = 3, sticky="nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Get Escrows", + command = operational_get_escrows) +btn_op_finish_escrow.grid(row = 5, column = 3, sticky="nsew") +btn_op_get_transaction = tk.Button(master=frm_form, text="Get Transaction", + command = operational_get_transaction) +btn_op_get_transaction.grid(row = 6, column = 3, sticky = "nsew") + + +# Start the application +window.mainloop() +``` \ No newline at end of file diff --git a/content/tutorials/quickstart/py-create-trustline-send-currency.md b/content/tutorials/quickstart/py-create-trustline-send-currency.md index 7de3bd033b..f62e7b3f44 100644 --- a/content/tutorials/quickstart/py-create-trustline-send-currency.md +++ b/content/tutorials/quickstart/py-create-trustline-send-currency.md @@ -39,6 +39,11 @@ Open the Quickstart window and get accounts: ## Create Trust Line +
+ +
+ + To create a trust line between accounts: 1. Enter a [currency code](https://www.iban.com/currency-codes) in the **Currency** field. diff --git a/content/tutorials/quickstart/py-mint-and-burn-nfts.md b/content/tutorials/quickstart/py-mint-and-burn-nfts.md index 7e4b7a9c67..606aba0608 100644 --- a/content/tutorials/quickstart/py-mint-and-burn-nfts.md +++ b/content/tutorials/quickstart/py-mint-and-burn-nfts.md @@ -41,6 +41,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Mint an NFT +
+ +
+ To mint a non-fungible token object: 1. Set the **Flags** field. For testing purposes, we recommend setting the value to _8_. This sets the _tsTransferable_ flag, meaning that the NFT can be transferred to another account. Otherwise, the NFT can only be transferred back to the issuing account. See [NFToken Mint](https://xrpl.org/nftokenmint.html#:~:text=Example%20NFTokenMint%20JSON-,NFTokenMint%20Fields,-NFTokenMint%20Flags) for information about all of the available flags for minting NFTs. diff --git a/content/tutorials/quickstart/py-transfer-nfts.md b/content/tutorials/quickstart/py-transfer-nfts.md index 05e92749d7..6de81b1bcd 100644 --- a/content/tutorials/quickstart/py-transfer-nfts.md +++ b/content/tutorials/quickstart/py-transfer-nfts.md @@ -47,6 +47,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Create a Sell Offer +
+ +
+ To create a NFT sell offer: 1. Enter the **Amount** of the sell offer in drops (millionths of an XRP). @@ -547,7 +551,7 @@ def standby_cancel_offer(): ent_standby_nft_offer_index.get() ) text_standby_results.delete("1.0", tk.END) - text_standby_results.insert("1.0", json.dumps(results, indent=4)) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) def op_create_sell_offer(): results = create_sell_offer( ent_operational_seed.get(), @@ -575,7 +579,7 @@ def op_create_buy_offer(): ent_operational_destination.get() ) text_operational_results.delete("1.0", tk.END) - text_operational_results.insert("1.0", json.dumps(results, indent=4)) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) def op_accept_buy_offer(): results = accept_buy_offer ( ent_operational_seed.get(), @@ -593,7 +597,7 @@ def op_cancel_offer(): ent_operational_nft_offer_index.get() ) text_operational_results.delete("1.0", tk.END) - text_operational_results.insert("1.0", json.dumps(results, indent=4)) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) # Module 3 Handlers @@ -686,10 +690,10 @@ def operational_configure_account(): def get_balances(): results = get_balance(ent_operational_account.get(), ent_standby_account.get()) text_standby_results.delete("1.0", tk.END) - text_standby_results.insert("1.0", json.dumps(results, indent=4)) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) results = get_balance(ent_standby_account.get(), ent_operational_account.get()) text_operational_results.delete("1.0", tk.END) - text_operational_results.insert("1.0", json.dumps(results, indent=4)) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) # Module 1 Handlers def get_standby_account(): @@ -992,7 +996,7 @@ btn_op_burn_token = tk.Button(master=frm_form, text="Burn NFT", btn_op_burn_token.grid(row=10, column=3, sticky="nsew") ``` -Add buttons for transferring NFTs. +Add buttons for transferring NFTs. ```python btn_op_create_sell_offer = tk.Button(master=frm_form, text="Create Sell Offer", diff --git a/content/tutorials/quickstart/transfer-nfts-using-javascript.md b/content/tutorials/quickstart/transfer-nfts-using-javascript.md index 1b3c5a9a70..251033bc4a 100644 --- a/content/tutorials/quickstart/transfer-nfts-using-javascript.md +++ b/content/tutorials/quickstart/transfer-nfts-using-javascript.md @@ -40,6 +40,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port ## Create a Sell Offer +
+ +
+ To create a NFT sell offer: 1. Enter the **Amount** of the sell offer in drops (millionths of an XRP). diff --git a/content/tutorials/tasks/index.md b/content/tutorials/tasks/index.md new file mode 100644 index 0000000000..67177fed54 --- /dev/null +++ b/content/tutorials/tasks/index.md @@ -0,0 +1,9 @@ +--- +html: tasks.html +parent: tutorials.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +--- +# Tasks + +Common tasks on the XRP Ledger. \ No newline at end of file diff --git a/content/tutorials/tasks/manage-account-settings/index.md b/content/tutorials/tasks/manage-account-settings/index.md new file mode 100644 index 0000000000..e433973dfb --- /dev/null +++ b/content/tutorials/tasks/manage-account-settings/index.md @@ -0,0 +1,8 @@ +--- +html: manage-account-settings.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# Manage Account Settings + +Set up your XRP Ledger account to send and receive payments the way you want it to. \ No newline at end of file diff --git a/content/tutorials/tasks/use-specialized-payment-types/index.md b/content/tutorials/tasks/use-specialized-payment-types/index.md new file mode 100644 index 0000000000..fd4451d0dd --- /dev/null +++ b/content/tutorials/tasks/use-specialized-payment-types/index.md @@ -0,0 +1,8 @@ +--- +html: use-specialized-payment-types.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# Use Specialized Payment Types + +Use advanced features like Escrow and Payment Channels to build smart applications on the XRP Ledger. \ No newline at end of file diff --git a/content/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md b/content/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md new file mode 100644 index 0000000000..7c04312c9b --- /dev/null +++ b/content/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md @@ -0,0 +1,8 @@ +--- +html: use-escrows.html +parent: use-specialized-payment-types.html +template: pagetype-category.html.jinja +--- +# Use Escrows + +The XRP Ledger supports escrows that can be executed only after a certain time has passed or a cryptographic condition has been fulfilled. Escrows can only send XRP, not issued currencies. diff --git a/content/tutorials/tasks/use-tokens/index.md b/content/tutorials/tasks/use-tokens/index.md new file mode 100644 index 0000000000..b6406a1bdc --- /dev/null +++ b/content/tutorials/tasks/use-tokens/index.md @@ -0,0 +1,8 @@ +--- +html: use-tokens.html +parent: tasks.html +template: pagetype-category.html.jinja +--- +# Use Tokens + +Create and trade tokens (fungible or otherwise) in the XRP Ledger. \ No newline at end of file diff --git a/content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md b/content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md index 12ecaac103..14bd90b3c3 100644 --- a/content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md +++ b/content/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md @@ -228,6 +228,6 @@ Response: - [Escrow ledger object](escrow-object.html) -{% include '_snippets/rippled-api-links.md' %} -{% include '_snippets/tx-type-links.md' %} +{% include '_snippets/rippled-api-links.md' %} +{% include '_snippets/tx-type-links.md' %} {% include '_snippets/rippled_versions.md' %} diff --git a/content/tutorials/use-tokens/create-an-automated-market-maker.md b/content/tutorials/use-tokens/create-an-automated-market-maker.md index 7750e2af30..99755a2fa3 100644 --- a/content/tutorials/use-tokens/create-an-automated-market-maker.md +++ b/content/tutorials/use-tokens/create-an-automated-market-maker.md @@ -11,6 +11,7 @@ labels: - AMM --- # Create an Automated Market Maker + _(Requires the [AMM amendment][] :not_enabled:)_ An [Automated Market Maker (AMM)](automated-market-makers.html) can be an efficient way to facilitate exchanges between two assets while earning its liquidity providers passive income. This tutorial shows how to create an AMM for a given asset pair. @@ -76,7 +77,7 @@ _JavaScript_ As the creator of an AMM, you are also the first liquidity provider and you have to supply it with a starting pool of assets. Other users of the XRP Ledger can also become liquidity providers by supplying assets after the AMM exists. It's crucial to choose assets carefully because, as a liquidity provider for an AMM, you are supplying some amounts of both for users to swap between. If one of the AMM's assets becomes worthless, other users can use the AMM to trade for the other asset, leaving the AMM (and thus, its liquidity providers including you) holding only the worthless one. Technically, the AMM always holds some positive amount of both assets, but the amounts can be very small. -You can choose any pair of fungible assets in the XRP Ledger, including XRP or tokens, including LP Tokens from another AMM. If you use a token, you must hold some amount of that token. (If a token's issuer uses, [authorized trust lines](authorized-trust-lines.html), that means you have to be authorized first.) +You can choose any pair of fungible assets in the XRP Ledger, including XRP or tokens, as long as they meet the [restrictions on AMM assets](automated-market-makers.html#restrictions-on-assets). For each of the two assets, you need to know its currency code and issuer; as an exception, XRP has no issuer. For each of the assets, you must hold a balance of the asset (or _be_ the issuer). The following sample code acquires two assets, "TST" (which it buys using XRP) and "FOO" (which it receives from the issuer). diff --git a/content/use-cases/defi/index.md b/content/use-cases/defi/index.md new file mode 100644 index 0000000000..c4c79f86fa --- /dev/null +++ b/content/use-cases/defi/index.md @@ -0,0 +1,10 @@ +--- +html: defi-uc.html +parent: use-cases.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Enabling fast, secure financial transactions without a central authority. +--- +# Decentralized Finance + +Decentralized Finance (DeFi) is about enabling fast, secure financial transactions without a central authority. \ No newline at end of file diff --git a/content/use-cases/index.md b/content/use-cases/index.md new file mode 100644 index 0000000000..ed8957d1ad --- /dev/null +++ b/content/use-cases/index.md @@ -0,0 +1,10 @@ +--- +html: use-cases.html +parent: docs.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Browse the documentation based on practical use cases. +--- +# Use Cases + +Browse the documentation based on practical use cases. \ No newline at end of file diff --git a/content/use-cases/payments/index.md b/content/use-cases/payments/index.md new file mode 100644 index 0000000000..c8ccc96658 --- /dev/null +++ b/content/use-cases/payments/index.md @@ -0,0 +1,10 @@ +--- +html: payments-uc.html +parent: use-cases.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Practical examples for using different types of payment on the XRP Ledger. +--- +# Payments + +Practical examples for using different types of payment on the XRP Ledger. \ No newline at end of file diff --git a/content/use-cases/tokenization/index.md b/content/use-cases/tokenization/index.md new file mode 100644 index 0000000000..a6d3c04168 --- /dev/null +++ b/content/use-cases/tokenization/index.md @@ -0,0 +1,10 @@ +--- +html: tokenization.html +parent: use-cases.html +top_nav_grouping: Article Types +template: pagetype-category.html.jinja +blurb: Work with a variety of tokens supported by the XRP Ledger. +--- +# Tokenization + +Work with a variety of tokens supported by the XRP Ledger. \ No newline at end of file diff --git a/dactyl-config.yml b/dactyl-config.yml index 6da5c08778..6fb5baaf00 100644 --- a/dactyl-config.yml +++ b/dactyl-config.yml @@ -31,6 +31,7 @@ default_filters: - slug - copy_code_to_clipboard - enforce_filenames + # - make_indexes callout_class: "devportal-callout" callout_types: @@ -378,7 +379,7 @@ pages: targets: - en - - md: faq.ja.md + - md: "@i18n/ja/faq.md" targets: - ja @@ -445,8 +446,7 @@ pages: html: docs.html parent: index.html template: page-docs.html.jinja - sidebar: disabled - top_nav_level: 1 + sidebar: left_only top_nav_name: ドキュメント top_nav_shortcuts: # Programming Languages @@ -492,37 +492,27 @@ pages: # Introduction ----------------------------------------------------------------- # TODO: these are placed under "Docs" in nav but the files are under "Docs/Concepts" - - name: Introduction - html: introduction.html - parent: docs.html - template: pagetype-category.html.jinja - blurb: This is a quick introduction to the principal features of the XRP Ledger (XRPL). Read this to get a high level understanding of the XRPL, then you can read more about areas of particular interest. The XRP Ledger is a blockchain that permanently records digital transactions of tokens between accounts. The sections below expand on the concepts introduced in that sentence. - top_nav_grouping: Article Types + - md: introduction/index.md targets: - en - - name: 基本 - html: introduction.html - parent: docs.html - template: pagetype-category.html.jinja - blurb: XRP Ledger(XRPL)の主要な機能を簡単に紹介します。これを読んでXRPLのハイレベルな理解を深め、その後、特に興味のある分野についての詳細を読むことができます。XRP Ledgerは、アカウント間のトークンのデジタルトランザクションを永続的に記録するブロックチェーンです。以下のセクションは、その文章で紹介された概念を拡張するものです。 - top_nav_grouping: カテゴリ + - md: "@i18n/ja/introduction/index.md" targets: - ja - - md: concepts/introduction/what-is-the-xrp-ledger.md + - md: introduction/what-is-the-xrp-ledger.md targets: - en - - md: concepts/introduction/what-is-the-xrp-ledger.ja.md + - md: "@i18n/ja/introduction/what-is-the-xrp-ledger.md" targets: - ja - - md: concepts/introduction/what-is-xrp.md + - md: introduction/what-is-xrp.md targets: - en - - md: concepts/introduction/what-is-xrp.ja.md + - md: "@i18n/ja/introduction/what-is-xrp.md" targets: - ja @@ -536,72 +526,51 @@ pages: - en - ja - - md: concepts/introduction/crypto-wallets.md + - md: introduction/crypto-wallets.md parent: introduction.html targets: - en - - md: concepts/introduction/crypto-wallets.ja.md + - md: "@i18n/ja/introduction/crypto-wallets.md" parent: introduction.html targets: - ja - - md: concepts/introduction/txn-and-requests.md + - md: introduction/transactions-and-requests.md parent: introduction.html targets: - en - - md: concepts/introduction/txn-and-requests.ja.md + - md: "@i18n/ja/introduction/transactions-and-requests.md" parent: introduction.html targets: - ja - - md: concepts/introduction/software-ecosystem.md + - md: introduction/software-ecosystem.md parent: introduction.html targets: - en - - md: concepts/introduction/software-ecosystem.ja.md + - md: "@i18n/ja/introduction/software-ecosystem.md" parent: introduction.html targets: - ja # Use Cases -------------------------------------------------------------------- - - name: Use Cases - html: use-cases.html - parent: docs.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Browse the documentation based on practical use cases. + - md: use-cases/index.md targets: - en - - name: ユースケース - html: use-cases.html - parent: docs.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: 実践的なユースケースに基づいたドキュメントをご覧ください。 + - md: "@i18n/ja/use-cases/index.md" targets: - ja - - - name: Payments - html: payments-uc.html - parent: use-cases.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Practical examples for using different types of payment on the XRP Ledger. + - md: use-cases/payments/index.md targets: - - en + - en - - name: Payment - html: payments-uc.html - parent: use-cases.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: XRP Ledgerで様々なタイプの支払いを利用するための実例を紹介します。 + - md: "@i18n/ja/use-cases/payments/index.md" targets: - ja @@ -610,7 +579,7 @@ pages: targets: - en - - md: use-cases/payments/peer-to-peer-payments-uc.ja.md + - md: "@i18n/ja/use-cases/payments/peer-to-peer-payments-uc.md" parent: payments-uc.html targets: - ja @@ -620,7 +589,7 @@ pages: targets: - en - - md: use-cases/payments/restricting-deposits-uc.ja.md + - md: "@i18n/ja/use-cases/payments/restricting-deposits-uc.md" parent: payments-uc.html targets: - ja @@ -630,26 +599,16 @@ pages: targets: - en - - md: use-cases/payments/smart-contracts-uc.ja.md + - md: "@i18n/ja/use-cases/payments/smart-contracts-uc.md" parent: payments-uc.html targets: - ja - - name: Tokenization - html: tokenization.html - parent: use-cases.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Work with a variety of tokens supported by the XRP Ledger. + - md: use-cases/tokenization/index.md targets: - en - - name: Tokenization - html: tokenization.html - parent: use-cases.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: XRP Ledgerが対応する様々なトークンを使用できます。 + - md: "@i18n/ja/use-cases/tokenization/index.md" targets: - ja @@ -657,7 +616,7 @@ pages: targets: - en - - md: use-cases/tokenization/stablecoin-issuer.ja.md + - md: "@i18n/ja/use-cases/tokenization/stablecoin-issuer.md" parent: tokenization.html targets: - ja @@ -667,7 +626,7 @@ pages: targets: - en - - md: use-cases/tokenization/nft-mkt-overview.ja.md + - md: "@i18n/ja/use-cases/tokenization/nft-mkt-overview.md" parent: tokenization.html targets: - ja @@ -679,7 +638,7 @@ pages: - en # TODO: these files aren't nested under "NFT mkt overview" but they are in the nav - - md: use-cases/tokenization/nftoken-marketplace.ja.md + - md: "@i18n/ja/use-cases/tokenization/nftoken-marketplace.md" parent: nft-mkt-overview.html targets: - ja @@ -689,7 +648,7 @@ pages: targets: - en - - md: use-cases/tokenization/authorized-minter.ja.md + - md: "@i18n/ja/use-cases/tokenization/authorized-minter.md" parent: nft-mkt-overview.html targets: - ja @@ -699,26 +658,16 @@ pages: targets: - en - - md: use-cases/tokenization/digital-artist.ja.md + - md: "@i18n/ja/use-cases/tokenization/digital-artist.md" parent: nft-mkt-overview.html targets: - ja - - name: Decentralized Finance - html: defi-uc.html - parent: use-cases.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Enabling fast, secure financial transactions without a central authority. + - md: use-cases/defi/index.md targets: - en - - name: DeFi - html: defi-uc.html - parent: use-cases.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: 中央機関を介さずに、高速で安全な金融トランザクションを可能にします。 + - md: "@i18n/ja/use-cases/defi/index.md" targets: - ja @@ -727,7 +676,7 @@ pages: targets: - en - - md: use-cases/defi/algorithmic-trading.ja.md + - md: "@i18n/ja/use-cases/defi/algorithmic-trading.md" parent: defi-uc.html targets: - ja @@ -737,7 +686,7 @@ pages: targets: - en - - md: use-cases/defi/list-xrp-as-an-exchange.ja.md + - md: "@i18n/ja/use-cases/defi/list-xrp-as-an-exchange.md" parent: defi-uc.html targets: - ja @@ -745,31 +694,21 @@ pages: # Concepts --------------------------------------------------------------------- - - name: Concepts - html: concepts.html - parent: docs.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Learn the "what" and "why" behind fundamental aspects of the XRP Ledger. + - md: concepts/index.md targets: - en - - name: コンセプト - html: concepts.html - parent: docs.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: XRP Ledgerの基本的な部分の背景に「何があるか」、「なぜなのか」を学びましょう。 + - md: "@i18n/ja/concepts/index.md" targets: - ja # Networks and Servers ----------------------------------------------------------------- - - md: concepts/networks-and-servers/networks-and-servers.md + - md: concepts/networks-and-servers/index.md targets: - en - - md: concepts/networks-and-servers/networks-and-servers.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/index.md" targets: - ja @@ -787,7 +726,7 @@ pages: targets: - en - - md: concepts/networks-and-servers/rippled-server-modes.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/rippled-server-modes.md" targets: - ja @@ -795,15 +734,15 @@ pages: targets: - en - - md: concepts/networks-and-servers/clustering.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/clustering.md" targets: - ja - - md: concepts/networks-and-servers/ledger-history/ledger-history.md + - md: concepts/networks-and-servers/ledger-history.md targets: - en - - md: concepts/networks-and-servers/ledger-history/ledger-history.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/ledger-history.md" targets: - ja @@ -811,7 +750,7 @@ pages: targets: - en - - md: concepts/networks-and-servers/peer-protocol.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/peer-protocol.md" targets: - ja @@ -819,7 +758,7 @@ pages: targets: - en - - md: concepts/networks-and-servers/transaction-censorship-detection.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/transaction-censorship-detection.md" targets: - ja @@ -827,7 +766,7 @@ pages: targets: - en - - md: concepts/networks-and-servers/parallel-networks.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/parallel-networks.md" targets: - ja @@ -835,7 +774,7 @@ pages: targets: - en - - md: concepts/networks-and-servers/amendments.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/amendments.md" targets: - ja @@ -843,18 +782,19 @@ pages: targets: - en - - md: concepts/networks-and-servers/the-clio-server.ja.md + - md: "@i18n/ja/concepts/networks-and-servers/the-clio-server.md" + outdated_translation: true targets: - ja # Consensus Protocol ------------------------------------------------------ # TODO: "consensus" subpages are nested in nav but not filesystem; also, might be a mismatch with other contents here - - md: concepts/consensus-protocol/consensus.md + - md: concepts/consensus-protocol/index.md targets: - en - - md: concepts/consensus-protocol/consensus.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/index.md" targets: - ja @@ -863,7 +803,7 @@ pages: - en # TODO: update title to match English - - md: concepts/consensus-protocol/consensus-structure.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/consensus-structure.md" targets: - ja @@ -871,7 +811,7 @@ pages: targets: - en - - md: concepts/consensus-protocol/consensus-principles-and-rules.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/consensus-principles-and-rules.md" targets: - ja @@ -879,7 +819,7 @@ pages: targets: - en - - md: concepts/consensus-protocol/consensus-protections.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/consensus-protections.md" targets: - ja @@ -888,7 +828,7 @@ pages: targets: - en - - md: concepts/consensus-protocol/invariant-checking.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/invariant-checking.md" targets: - ja @@ -896,7 +836,7 @@ pages: targets: - en - - md: concepts/consensus-protocol/fee-voting.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/fee-voting.md" targets: - ja @@ -904,7 +844,7 @@ pages: targets: - en - - md: concepts/consensus-protocol/negative-unl.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/negative-unl.md" targets: - ja @@ -912,17 +852,17 @@ pages: targets: - en - - md: concepts/consensus-protocol/consensus-research.ja.md + - md: "@i18n/ja/concepts/consensus-protocol/consensus-research.md" targets: - ja # Ledgers ----------------------------------------------------------------- - - md: concepts/ledgers/ledgers.md + - md: concepts/ledgers/index.md targets: - en - - md: concepts/ledgers/ledgers.ja.md + - md: "@i18n/ja/concepts/ledgers/index.md" targets: - ja @@ -930,7 +870,7 @@ pages: targets: - en - - md: concepts/ledgers/ledger-structure.ja.md + - md: "@i18n/ja/concepts/ledgers/ledger-structure.md" targets: - ja @@ -938,7 +878,7 @@ pages: targets: - en - - md: concepts/ledgers/open-closed-validated-ledgers.ja.md + - md: "@i18n/ja/concepts/ledgers/open-closed-validated-ledgers.md" targets: - ja @@ -946,7 +886,7 @@ pages: targets: - en - - md: concepts/ledgers/ledger-close-times.ja.md + - md: "@i18n/ja/concepts/ledgers/ledger-close-times.md" targets: - ja @@ -954,11 +894,11 @@ pages: # server management topics. # Transactions ------------------------------------------------------------ - - md: concepts/transactions/transactions.md + - md: concepts/transactions/index.md targets: - en - - md: concepts/transactions/transactions.ja.md + - md: "@i18n/ja/concepts/transactions/index.md" targets: - ja @@ -966,7 +906,7 @@ pages: targets: - en - - md: concepts/transactions/fees.ja.md + - md: "@i18n/ja/concepts/transactions/fees.md" targets: - ja @@ -974,24 +914,15 @@ pages: targets: - en - - md: concepts/transactions/reliable-transaction-submission.ja.md + - md: "@i18n/ja/concepts/transactions/reliable-transaction-submission.md" targets: - ja - # TODO: rename these to "secure-signing.md" - - md: concepts/transactions/set-up-secure-signing.md + - md: concepts/transactions/secure-signing.md targets: - en - - md: concepts/transactions/set-up-secure-signing.ja.md - targets: - - ja - - - md: concepts/transactions/multi-signing.md - targets: - - en - - - md: concepts/transactions/multi-signing.ja.md + - md: "@i18n/ja/concepts/transactions/secure-signing.md" targets: - ja @@ -999,10 +930,7 @@ pages: targets: - en - # TODO: Translate to Japanese. Somehow this page's blurb got translated already. - - md: concepts/transactions/source-and-destination-tags.md - blurb: 多目的アドレスとの間で支払いのやり取りをする具体的な目的を示すためにソースタグと宛先タグを使用します。 - untranslated_warning: true + - md: "@i18n/ja/concepts/transactions/source-and-destination-tags.md" targets: - ja @@ -1010,7 +938,7 @@ pages: targets: - en - - md: concepts/transactions/transaction-cost.ja.md + - md: "@i18n/ja/concepts/transactions/transaction-cost.md" targets: - ja @@ -1018,65 +946,48 @@ pages: targets: - en - - md: concepts/transactions/transaction-queue.ja.md + - md: "@i18n/ja/concepts/transactions/transaction-queue.md" targets: - ja - - md: concepts/transactions/finality-of-results.md + - md: concepts/transactions/finality-of-results/index.md targets: - en - - md: concepts/transactions/finality-of-results.ja.md + - md: "@i18n/ja/concepts/transactions/finality-of-results/index.md" targets: - ja - - md: concepts/transactions/look-up-transaction-results.md + - md: concepts/transactions/finality-of-results/look-up-transaction-results.md targets: - en - - md: concepts/transactions/look-up-transaction-results.ja.md + - md: "@i18n/ja/concepts/transactions/finality-of-results/look-up-transaction-results.md" targets: - ja - - md: concepts/transactions/transaction-malleability.md + - md: concepts/transactions/finality-of-results/transaction-malleability.md targets: - en - - md: concepts/transactions/transaction-malleability.ja.md + - md: "@i18n/ja/concepts/transactions/finality-of-results/transaction-malleability.md" targets: - ja - # TODO: match filename to page title - - md: concepts/transactions/about-canceling-a-transaction.md + - md: concepts/transactions/finality-of-results/canceling-a-transaction.md targets: - en - - md: concepts/transactions/about-canceling-a-transaction.ja.md - targets: - - ja - - - md: concepts/transactions/tickets.md - targets: - - en - - - md: concepts/transactions/tickets.ja.md + - md: "@i18n/ja/concepts/transactions/finality-of-results/canceling-a-transaction.md" targets: - ja # Payment Types ----------------------------------------------------------- - - name: Payment Types - html: payment-types.html - parent: concepts.html - template: pagetype-category.html.jinja - blurb: The XRP Ledger supports point-to-point XRP payments alongside other, more specialized payment types. + - md: concepts/payment-types/index.md targets: - en - - name: 支払いのタイプ - html: payment-types.html - parent: concepts.html - template: pagetype-category.html.jinja - blurb: XRP LedgerはポイントツーポイントのXRPペイメントのほかに、より専門的な支払いタイプをサポートしています。 + - md: "@i18n/ja/concepts/payment-types/index.md" targets: - ja @@ -1084,7 +995,7 @@ pages: targets: - en - - md: concepts/payment-types/direct-xrp-payments.ja.md + - md: "@i18n/ja/concepts/payment-types/direct-xrp-payments.md" targets: - ja @@ -1092,7 +1003,7 @@ pages: targets: - en - - md: concepts/payment-types/cross-currency-payments.ja.md + - md: "@i18n/ja/concepts/payment-types/cross-currency-payments.md" targets: - ja @@ -1100,7 +1011,7 @@ pages: targets: - en - - md: concepts/payment-types/checks.ja.md + - md: "@i18n/ja/concepts/payment-types/checks.md" targets: - ja @@ -1108,7 +1019,7 @@ pages: targets: - en - - md: concepts/payment-types/escrow.ja.md + - md: "@i18n/ja/concepts/payment-types/escrow.md" targets: - ja @@ -1116,7 +1027,7 @@ pages: targets: - en - - md: concepts/payment-types/partial-payments.ja.md + - md: "@i18n/ja/concepts/payment-types/partial-payments.md" targets: - ja @@ -1124,7 +1035,7 @@ pages: targets: - en - - md: concepts/payment-types/payment-channels.ja.md + - md: "@i18n/ja/concepts/payment-types/payment-channels.md" targets: - ja @@ -1133,7 +1044,7 @@ pages: targets: - en - - md: concepts/tokens/tokens.ja.md + - md: "@i18n/ja/concepts/tokens/tokens.md" targets: - ja @@ -1141,7 +1052,7 @@ pages: targets: - en - - md: concepts/tokens/non-fungible-tokens.ja.md + - md: "@i18n/ja/concepts/tokens/non-fungible-tokens.md" targets: - ja @@ -1154,7 +1065,7 @@ pages: targets: - en - - md: concepts/tokens/non-fungible-token-transfers.ja.md + - md: "@i18n/ja/concepts/tokens/non-fungible-token-transfers.md" targets: - ja @@ -1162,7 +1073,7 @@ pages: targets: - en - - md: concepts/tokens/nft-reserve-requirements.ja.md + - md: "@i18n/ja/concepts/tokens/nft-reserve-requirements.md" targets: - ja @@ -1170,7 +1081,7 @@ pages: targets: - en - - md: concepts/tokens/nftoken-batch-minting.ja.md + - md: "@i18n/ja/concepts/tokens/nftoken-batch-minting.md" targets: - ja @@ -1178,7 +1089,7 @@ pages: targets: - en - - md: concepts/tokens/nftoken-authorized-minting.ja.md + - md: "@i18n/ja/concepts/tokens/nftoken-authorized-minting.md" targets: - ja @@ -1186,7 +1097,7 @@ pages: targets: - en - - md: concepts/tokens/nftoken-auctions.ja.md + - md: "@i18n/ja/concepts/tokens/nftoken-auctions.md" targets: - ja @@ -1194,7 +1105,7 @@ pages: targets: - en - - md: concepts/tokens/nft-collections.ja.md + - md: "@i18n/ja/concepts/tokens/nft-collections.md" targets: - ja @@ -1202,7 +1113,7 @@ pages: targets: - en - - md: concepts/tokens/nft-fixed-supply.ja.md + - md: "@i18n/ja/concepts/tokens/nft-fixed-supply.md" targets: - ja @@ -1217,7 +1128,7 @@ pages: targets: - en - - md: concepts/tokens/trust-lines-and-issuing.ja.md + - md: "@i18n/ja/concepts/tokens/trust-lines-and-issuing.md" targets: - ja @@ -1225,21 +1136,26 @@ pages: targets: - en - - md: concepts/tokens/authorized-trust-lines.ja.md + - md: "@i18n/ja/concepts/tokens/authorized-trust-lines.md" targets: - ja -# TODO - Translate - md: concepts/tokens/clawing-back-tokens.md + status: not_enabled targets: - en + + - md: "@i18n/ja/concepts/tokens/clawing-back-tokens.md" + status: not_enabled + targets: - ja - md: concepts/tokens/freezes.md targets: - en - - md: concepts/tokens/freezes.ja.md + - md: "@i18n/ja/concepts/tokens/freezes.md" + outdated_translation: true targets: - ja @@ -1248,7 +1164,7 @@ pages: targets: - en - - md: concepts/tokens/common-misconceptions-about-freezes.ja.md + - md: "@i18n/ja/concepts/tokens/common-misconceptions-about-freezes.md" targets: - ja @@ -1256,7 +1172,7 @@ pages: targets: - en - - md: concepts/tokens/rippling.ja.md + - md: "@i18n/ja/concepts/tokens/rippling.md" targets: - ja @@ -1264,7 +1180,8 @@ pages: targets: - en - - md: concepts/tokens/transfer-fees.ja.md + - md: "@i18n/ja/concepts/tokens/transfer-fees.md" + outdated_translation: true targets: - ja @@ -1272,7 +1189,7 @@ pages: targets: - en - - md: concepts/tokens/paths.ja.md + - md: "@i18n/ja/concepts/tokens/paths.md" targets: - ja @@ -1280,7 +1197,7 @@ pages: targets: - en - - md: concepts/tokens/demurrage.ja.md + - md: "@i18n/ja/concepts/tokens/demurrage.md" targets: - ja @@ -1288,7 +1205,7 @@ pages: targets: - en - - md: concepts/tokens/decentralized-exchange.ja.md + - md: "@i18n/ja/concepts/tokens/decentralized-exchange.md" targets: - ja @@ -1296,7 +1213,7 @@ pages: targets: - en - - md: concepts/tokens/offers.ja.md + - md: "@i18n/ja/concepts/tokens/offers.md" targets: - ja @@ -1304,7 +1221,7 @@ pages: targets: - en - - md: concepts/tokens/autobridging.ja.md + - md: "@i18n/ja/concepts/tokens/autobridging.md" targets: - ja @@ -1312,7 +1229,7 @@ pages: targets: - en - - md: concepts/tokens/ticksize.ja.md + - md: "@i18n/ja/concepts/tokens/ticksize.md" targets: - ja @@ -1320,8 +1237,7 @@ pages: targets: - en - # TODO: update translation - - md: concepts/tokens/automated-market-makers.ja.md + - md: "@i18n/ja/concepts/tokens/automated-market-makers.md" outdated_translation: true targets: - ja @@ -1331,7 +1247,7 @@ pages: targets: - en - - md: concepts/accounts/accounts.ja.md + - md: "@i18n/ja/concepts/accounts/accounts.md" targets: - ja @@ -1339,39 +1255,47 @@ pages: targets: - en - #TODO: update translation. Mostly just the title has changed - - md: concepts/accounts/account-types.ja.md - outdated_translation: true + - md: "@i18n/ja/concepts/accounts/account-types.md" targets: - ja - #TODO: translate. Draws heavily on content that used to be in accounts.md - md: concepts/accounts/deleting-accounts.md targets: - en + + - md: "@i18n/ja/concepts/accounts/deleting-accounts.md" + targets: - ja - md: concepts/accounts/reserves.md targets: - en - - md: concepts/accounts/reserves.ja.md + - md: "@i18n/ja/concepts/accounts/reserves.md" targets: - ja - #TODO: translate. Draws heavily on content that used to be in accounts.md - md: concepts/accounts/addresses.md targets: - en + + - md: "@i18n/ja/concepts/accounts/addresses.md" + targets: - ja - md: concepts/accounts/cryptographic-keys.md targets: - en - # TODO: update translation based on latest English version - - md: concepts/accounts/cryptographic-keys.ja.md - outdated_translation: true + - md: "@i18n/ja/concepts/accounts/cryptographic-keys.md" + targets: + - ja + + - md: concepts/accounts/multi-signing.md + targets: + - en + + - md: "@i18n/ja/concepts/accounts/multi-signing.md" targets: - ja @@ -1379,7 +1303,16 @@ pages: targets: - en - - md: concepts/accounts/depositauth.ja.md + # TODO: translate table(depositauth-semantics-table.html) + - md: "@i18n/ja/concepts/accounts/depositauth.md" + targets: + - ja + + - md: concepts/accounts/tickets.md + targets: + - en + + - md: "@i18n/ja/concepts/accounts/tickets.md" targets: - ja @@ -1577,27 +1510,16 @@ pages: targets: - en - - md: tutorials/get-started/public-servers.ja.md + - md: "@i18n/ja/tutorials/get-started/public-servers.md" targets: - ja # Python ------------------------------------------------------------------- - - - name: Python - html: python.html - parent: tutorials.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: XRPL tutorials in Python. + - md: tutorials/python/index.md targets: - en - - name: Python - html: python.html - parent: tutorials.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: PythonでのXRPLチュートリアルです。 + - md: "@i18n/ja/tutorials/python/index.md" targets: - ja @@ -1612,21 +1534,11 @@ pages: targets: - ja - - name: Modular Tutorials in Python - html: modular-tutorials-in-python.html - parent: python.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Modular XRPL tutorials in Python. + - md: tutorials/python/modular-tutorials-in-python/index.md targets: - en - - name: Pythonのモジュール形式チュートリアル - html: modular-tutorials-in-python.html - parent: python.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: Pythonによるモジュール式XRPLチュートリアル。 + - md: "@i18n/ja/tutorials/python/modular-tutorials-in-python/index.md" targets: - ja @@ -1648,6 +1560,12 @@ pages: - en - ja + # TODO: translate + - md: tutorials/quickstart/py-create-time-based-escrows.md + targets: + - en + - ja + - name: NFTs Using Python html: nfts-using-python.html parent: modular-tutorials-in-python.html @@ -1682,6 +1600,12 @@ pages: - en - ja + # TODO: translate + - md: tutorials/quickstart/py-batch-minting.md + targets: + - en + - ja + - md: tutorials/build-apps/build-a-desktop-wallet-in-python.md targets: - en @@ -1689,21 +1613,11 @@ pages: # JavaScript --------------------------------------------------------------- - - name: JavaScript - html: javascript.html - parent: tutorials.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: XRPL tutorials in JavaScript. + - md: tutorials/javascript/index.md targets: - en - - name: JavaScript - html: javascript.html - parent: tutorials.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: JavaScriptでのXRPLチュートリアルです。 + - md: "@i18n/ja/tutorials/javascript/index.md" targets: - ja @@ -1711,13 +1625,13 @@ pages: targets: - en - - md: tutorials/get-started/get-started-using-javascript.ja.md + - md: "@i18n/ja/tutorials/get-started/get-started-using-javascript.md" targets: - ja # Old translated JS quickstart for ripple-lib 1.x. Refers to code samples # that have been removed. - # - md: tutorials/get-started/get-started-using-javascript.ja.md + # - md: "@i18n/ja/tutorials/get-started/get-started-using-javascript.md" # targets: # - ja @@ -1740,21 +1654,11 @@ pages: - en - ja - - name: Modular Tutorials in JavaScript - html: modular-tutorials-in-javascript.html - parent: javascript.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Modular XRPL tutorials in JavaScript. + - md: tutorials/javascript/modular-tutorials-in-javascript/index.md targets: - en - - name: JavaScriptのモジュール形式チュートリアル - html: modular-tutorials-in-javascript.html - parent: javascript.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: JavaScriptによるモジュール式XRPLチュートリアルです。 + - md: "@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/index.md" targets: - ja @@ -1788,21 +1692,11 @@ pages: - en - ja - - name: NFTs Using JavaScript - html: nfts-using-javascript.html - parent: modular-tutorials-in-javascript.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Mint and sell NFTs on the XRP Ledger using JavaScript. + - md: tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md targets: - en - - name: JavaScriptを使ったNFT - html: nfts-using-javascript.html - parent: modular-tutorials-in-javascript.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: XRP Ledger上でNFTのミントと販売を行います。 + - md: "@i18n/ja/tutorials/javascript/modular-tutorials-in-javascript/nfts-using-javascript/index.md" targets: - ja @@ -1859,21 +1753,11 @@ pages: # Java --------------------------------------------------------------------- - - name: Java - html: java.html - parent: tutorials.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: XRPL tutorials in Java. + - md: tutorials/java/index.md targets: - en - - name: Java - html: java.html - parent: tutorials.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: JavaでのXRPLチュートリアルです。 + - md: "@i18n/ja/tutorials/java/index.md" targets: - ja @@ -1921,21 +1805,11 @@ pages: # HTTP / Websocket Tutorials --------------------------------------------------- - - name: HTTP / Websocket APIs - html: http-websocket-apis-tutorials.html - parent: tutorials.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: XRPL tutorials for HTTP / Websocket APIs. + - md: tutorials/http-websocket-apis/index.md targets: - en - - name: HTTP / Websocket API - html: http-websocket-apis-tutorials.html - parent: tutorials.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: HTTP / Websocket APIのXRPLチュートリアルです。 + - md: "@i18n/ja/tutorials/http-websocket-apis/index.md" targets: - ja @@ -1953,7 +1827,7 @@ pages: targets: - en - - md: tutorials/get-started/get-started-using-http-websocket-apis.ja.md + - md: "@i18n/ja/tutorials/get-started/get-started-using-http-websocket-apis.md" targets: - ja @@ -1961,45 +1835,27 @@ pages: targets: - en - - md: tutorials/get-started/monitor-incoming-payments-with-websocket.ja.md + - md: "@i18n/ja/tutorials/get-started/monitor-incoming-payments-with-websocket.md" targets: - ja # Tasks -------------------------------------------------------------------- - - name: Tasks - html: tasks.html - parent: tutorials.html - top_nav_grouping: Article Types - template: pagetype-category.html.jinja - blurb: Common tasks on the XRP Ledger. + - md: tutorials/tasks/index.md targets: - en - - name: タスク - html: tasks.html - parent: tutorials.html - top_nav_grouping: カテゴリ - template: pagetype-category.html.jinja - blurb: XRP Ledgerの代表的なタスクです。 + - md: "@i18n/ja/tutorials/tasks/index.md" targets: - ja # Manage Account Settings ---------------------------------------------- - - name: Manage Account Settings - html: manage-account-settings.html - parent: tasks.html - template: pagetype-category.html.jinja - blurb: Set up your XRP Ledger account to send and receive payments the way you want it to. + - md: tutorials/tasks/manage-account-settings/index.md targets: - en - - name: アカウントの設定の利用 - html: manage-account-settings.html - parent: tasks.html - template: pagetype-category.html.jinja - blurb: XRP Ledgerアカウントを設定して、思い通りの支払いをしましょう。 + - md: "@i18n/ja/tutorials/tasks/manage-account-settings/index.md" targets: - ja @@ -2010,7 +1866,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/assign-a-regular-key-pair.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/assign-a-regular-key-pair.md" targets: - ja @@ -2018,7 +1874,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/change-or-remove-a-regular-key-pair.md" targets: - ja @@ -2026,7 +1882,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/disable-master-key-pair.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/disable-master-key-pair.md" targets: - ja @@ -2034,7 +1890,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/set-up-multi-signing.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/set-up-multi-signing.md" targets: - ja @@ -2042,7 +1898,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/send-a-multi-signed-transaction.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/send-a-multi-signed-transaction.md" targets: - ja @@ -2050,7 +1906,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/require-destination-tags.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/require-destination-tags.md" targets: - ja @@ -2058,7 +1914,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/offline-account-setup.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/offline-account-setup.md" targets: - ja @@ -2066,7 +1922,7 @@ pages: targets: - en - - md: tutorials/manage-account-settings/use-tickets.ja.md + - md: "@i18n/ja/tutorials/manage-account-settings/use-tickets.md" targets: - ja @@ -2074,25 +1930,17 @@ pages: targets: - en - - md: tutorials/get-started/send-xrp.ja.md + - md: "@i18n/ja/tutorials/get-started/send-xrp.md" targets: - ja # Use Specialized Payment Types -------------------------------------------------------- - - name: Use Specialized Payment Types - html: use-specialized-payment-types.html - parent: tasks.html - template: pagetype-category.html.jinja - blurb: Use advanced features like Escrow and Payment Channels to build smart applications on the XRP Ledger. + - md: tutorials/tasks/use-specialized-payment-types/index.md targets: - en - - name: 専門的な支払いタイプの使用 - html: use-specialized-payment-types.html - parent: tasks.html - template: pagetype-category.html.jinja - blurb: EscrowやPayment Channelなどの高度な機能を使用して、XRP Ledgerでスマートアプリケーションを構築しましょう。 + - md: "@i18n/ja/tutorials/tasks/use-specialized-payment-types/index.md" targets: - ja @@ -2106,19 +1954,11 @@ pages: - en - ja - - name: Use Escrows - html: use-escrows.html - parent: use-specialized-payment-types.html - blurb: The XRP Ledger supports escrows that can be executed only after a certain time has passed or a cryptographic condition has been fulfilled. Escrows can only send XRP, not issued currencies. - template: pagetype-category.html.jinja + - md: tutorials/tasks/use-specialized-payment-types/use-escrows/index.md targets: - en - - name: Escrowの使用 - html: use-escrows.html - parent: use-specialized-payment-types.html - blurb: XRP Ledgerは、一定時間の経過後か暗号条件が満たされた場合にのみ実行されるEscrowをサポートします。Escrowが送金できるのはXRPのみで、発行済み通貨は送金できません。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/tutorials/tasks/use-specialized-payment-types/use-escrows/index.md" targets: - ja @@ -2126,7 +1966,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-time-held-escrow.md" targets: - ja @@ -2134,7 +1974,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.md" targets: - ja @@ -2142,7 +1982,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md" targets: - ja @@ -2150,7 +1990,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-escrows/look-up-escrows.md" targets: - ja @@ -2165,7 +2005,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-payment-channels.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-payment-channels.md" targets: - ja @@ -2181,7 +2021,7 @@ pages: - en # TODO: update translation to match English updates - - md: tutorials/use-specialized-payment-types/use-checks/use-checks.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/use-checks.md" outdated_translation: true targets: - ja @@ -2190,7 +2030,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/send-a-check.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/send-a-check.md" targets: - ja @@ -2198,7 +2038,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md" targets: - ja @@ -2206,7 +2046,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md" targets: - ja @@ -2214,7 +2054,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/cancel-a-check.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/cancel-a-check.md" targets: - ja @@ -2222,7 +2062,7 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-sender.md" targets: - ja @@ -2230,25 +2070,17 @@ pages: targets: - en - - md: tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.ja.md + - md: "@i18n/ja/tutorials/use-specialized-payment-types/use-checks/look-up-checks-by-recipient.md" targets: - ja # Use Tokens ------------------------------------------------------------------ - - name: Use Tokens - html: use-tokens.html - parent: tasks.html - blurb: Create and trade tokens (fungible or otherwise) in the XRP Ledger. - template: pagetype-category.html.jinja + - md: tutorials/tasks/use-tokens/index.md targets: - en - - name: トークンの利用 - html: use-tokens.html - parent: tasks.html - blurb: XRP Ledgerでトークン(代替型やそれ以外)を発行し、取引しましょう - template: pagetype-category.html.jinja + - md: "@i18n/ja/tutorials/tasks/use-tokens/index.md" targets: - ja @@ -2415,88 +2247,79 @@ pages: targets: - ja - - name: XRP Ledger Protocol Reference - html: protocol-reference.html - parent: references.html - template: pagetype-category.html.jinja - blurb: Features and rules of the XRP Ledger protocol, regardless of how you access it. - eyebrow_text: Features and Rules + - md: references/protocol/index.md targets: - en - - name: XRP Ledgerプロトコルリファレンス - html: protocol-reference.html - parent: references.html - template: pagetype-category.html.jinja - blurb: XRP Ledgerプロトコルの、利用方法に依存しない特徴やルールについて。 - eyebrow_text: 特徴とルール + - md: "@i18n/ja/references/protocol/index.md" targets: - ja - - md: references/protocol-reference/data-types/basic-data-types.md + - md: references/protocol/data-types/basic-data-types.md targets: - en - - md: references/protocol-reference/data-types/basic-data-types.ja.md - targets: - - ja - - - md: references/protocol-reference/data-types/base58-encodings.md - targets: - - en - - - md: references/protocol-reference/data-types/base58-encodings.ja.md - targets: - - ja - - - md: references/protocol-reference/data-types/currency-formats.md - targets: - - en - - # TODO: update translation to add a table like in the English version - - md: references/protocol-reference/data-types/currency-formats.ja.md + - md: "@i18n/ja/references/protocol/data-types/basic-data-types.md" outdated_translation: true targets: - ja - - md: references/protocol-reference/data-types/nftoken.md + - md: references/protocol/data-types/base58-encodings.md + targets: + - en + + - md: "@i18n/ja/references/protocol/data-types/base58-encodings.md" + targets: + - ja + + - md: references/protocol/data-types/currency-formats.md + targets: + - en + + # TODO: update translation to add a table like in the English version + - md: "@i18n/ja/references/protocol/data-types/currency-formats.md" + outdated_translation: true + targets: + - ja + + - md: references/protocol/data-types/nftoken.md targets: - en # TODO: update translation to use the term "sequence number" rather than # "dumb sequential" - - md: references/protocol-reference/data-types/nftoken.ja.md + - md: "@i18n/ja/references/protocol/data-types/nftoken.md" outdated_translation: true targets: - ja - - md: references/protocol-reference/ledger-data/ledger-data-formats.md + - md: references/protocol/ledger-data/index.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-data-formats.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/index.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-header.md + - md: references/protocol/ledger-data/ledger-header.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-header.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-header.md" targets: - ja # TODO: translate - - md: references/protocol-reference/ledger-data/ledger-entry-common-fields.md + - md: references/protocol/ledger-data/common-fields.md targets: - en - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.md + - md: references/protocol/ledger-data/ledger-entry-types/index.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/ledger-entry-types.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/index.md" targets: - ja @@ -2520,524 +2343,517 @@ pages: - en - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/accountroot.md + - md: references/protocol/ledger-data/ledger-entry-types/accountroot.md targets: - en - # TODO: update translation for rippled v1.11.0 & AMM - - md: references/protocol-reference/ledger-data/ledger-entry-types/accountroot.ja.md - outdated_translation: true + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/accountroot.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/amendments.md + - md: references/protocol/ledger-data/ledger-entry-types/amendments.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/amendments.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amendments.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/amm.md + - md: references/protocol/ledger-data/ledger-entry-types/amm.md targets: - en - # TODO: update translation - - md: references/protocol-reference/ledger-data/ledger-entry-types/amm.ja.md - outdated_translation: true + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/amm.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/check.md + - md: references/protocol/ledger-data/ledger-entry-types/check.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/check.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/check.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.md + - md: references/protocol/ledger-data/ledger-entry-types/depositpreauth.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/depositpreauth.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/depositpreauth.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/directorynode.md + - md: references/protocol/ledger-data/ledger-entry-types/directorynode.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/directorynode.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/directorynode.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/escrow.md + - md: references/protocol/ledger-data/ledger-entry-types/escrow.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/escrow.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/escrow.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/feesettings.md + - md: references/protocol/ledger-data/ledger-entry-types/feesettings.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/feesettings.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/feesettings.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.md + - md: references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/ledgerhashes.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ledgerhashes.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.md + - md: references/protocol/ledger-data/ledger-entry-types/negativeunl.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/negativeunl.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/negativeunl.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.md + - md: references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/nftokenoffer.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenoffer.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.md + - md: references/protocol/ledger-data/ledger-entry-types/nftokenpage.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/nftokenpage.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/nftokenpage.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/offer.md + - md: references/protocol/ledger-data/ledger-entry-types/offer.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/offer.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/offer.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/paychannel.md + - md: references/protocol/ledger-data/ledger-entry-types/paychannel.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/paychannel.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/paychannel.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.md + - md: references/protocol/ledger-data/ledger-entry-types/ripplestate.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/ripplestate.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ripplestate.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/signerlist.md + - md: references/protocol/ledger-data/ledger-entry-types/signerlist.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/signerlist.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/signerlist.md" targets: - ja - - md: references/protocol-reference/ledger-data/ledger-entry-types/ticket.md + - md: references/protocol/ledger-data/ledger-entry-types/ticket.md targets: - en - - md: references/protocol-reference/ledger-data/ledger-entry-types/ticket.ja.md + - md: "@i18n/ja/references/protocol/ledger-data/ledger-entry-types/ticket.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-formats.md + - md: references/protocol/transactions/index.md targets: - en # TODO: update blurb translation based on English version - - md: references/protocol-reference/transactions/transaction-formats.ja.md + - md: "@i18n/ja/references/protocol/transactions/index.md" outdated_translation: true targets: - ja - - md: references/protocol-reference/transactions/transaction-common-fields.md + - md: references/protocol/transactions/common-fields.md targets: - en # TODO: update translation with rippled 1.11.0 changes - - md: references/protocol-reference/transactions/transaction-common-fields.ja.md + - md: "@i18n/ja/references/protocol/transactions/common-fields.md" outdated_translation: true targets: - ja - - md: references/protocol-reference/transactions/transaction-types/transaction-types.md + - md: references/protocol/transactions/types/index.md targets: - en - - md: references/protocol-reference/transactions/transaction-types/transaction-types.ja.md + - md: "@i18n/ja/references/protocol/transactions/types/index.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-types/accountset.md + - md: references/protocol/transactions/types/accountset.md targets: - en - - md: references/protocol-reference/transactions/transaction-types/accountset.ja.md + - md: "@i18n/ja/references/protocol/transactions/types/accountset.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-types/accountdelete.md + - md: references/protocol/transactions/types/accountdelete.md targets: - en - - md: references/protocol-reference/transactions/transaction-types/accountdelete.ja.md + - md: "@i18n/ja/references/protocol/transactions/types/accountdelete.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-types/ammbid.md + - md: references/protocol/transactions/types/ammbid.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammbid.md" + targets: + - ja + + - md: references/protocol/transactions/types/ammcreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammcreate.md" + outdated_translation: true + targets: + - ja + + - md: references/protocol/transactions/types/ammdelete.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammdelete.md" + targets: + - ja + + - md: references/protocol/transactions/types/ammdeposit.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammdeposit.md" + targets: + - ja + + - md: references/protocol/transactions/types/ammvote.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammvote.md" + targets: + - ja + + - md: references/protocol/transactions/types/ammwithdraw.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ammwithdraw.md" + targets: + - ja + + - md: references/protocol/transactions/types/checkcancel.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/checkcancel.md" + targets: + - ja + + - md: references/protocol/transactions/types/checkcash.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/checkcash.md" + targets: + - ja + + - md: references/protocol/transactions/types/checkcreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/checkcreate.md" + targets: + - ja + + - md: references/protocol/transactions/types/clawback.md + status: not_enabled + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/clawback.md" + status: not_enabled + targets: + - ja + + - md: references/protocol/transactions/types/depositpreauth.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/depositpreauth.md" + targets: + - ja + + - md: references/protocol/transactions/types/escrowcancel.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/escrowcancel.md" + targets: + - ja + + - md: references/protocol/transactions/types/escrowcreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/escrowcreate.md" + targets: + - ja + + - md: references/protocol/transactions/types/escrowfinish.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/escrowfinish.md" + targets: + - ja + + - md: references/protocol/transactions/types/nftokenacceptoffer.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/nftokenacceptoffer.md" + targets: + - ja + + - md: references/protocol/transactions/types/nftokenburn.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/nftokenburn.md" + targets: + - ja + + - md: references/protocol/transactions/types/nftokencanceloffer.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/nftokencanceloffer.md" + targets: + - ja + + - md: references/protocol/transactions/types/nftokencreateoffer.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/nftokencreateoffer.md" + targets: + - ja + + - md: references/protocol/transactions/types/nftokenmint.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/nftokenmint.md" + targets: + - ja + + - md: references/protocol/transactions/types/offercancel.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/offercancel.md" + targets: + - ja + + - md: references/protocol/transactions/types/offercreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/offercreate.md" + targets: + - ja + + - md: references/protocol/transactions/types/payment.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/payment.md" + targets: + - ja + + - md: references/protocol/transactions/types/paymentchannelclaim.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/paymentchannelclaim.md" + targets: + - ja + + - md: references/protocol/transactions/types/paymentchannelcreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/paymentchannelcreate.md" + targets: + - ja + + - md: references/protocol/transactions/types/paymentchannelfund.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/paymentchannelfund.md" + targets: + - ja + + - md: references/protocol/transactions/types/setregularkey.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/setregularkey.md" + targets: + - ja + + - md: references/protocol/transactions/types/signerlistset.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/signerlistset.md" + targets: + - ja + + - md: references/protocol/transactions/types/ticketcreate.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/ticketcreate.md" + targets: + - ja + + - md: references/protocol/transactions/types/trustset.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/types/trustset.md" + targets: + - ja + + - md: references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md" + targets: + - ja + + - md: references/protocol/transactions/pseudo-transaction-types/enableamendment.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/pseudo-transaction-types/enableamendment.md" + targets: + - ja + + - md: references/protocol/transactions/pseudo-transaction-types/setfee.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/pseudo-transaction-types/setfee.md" + targets: + - ja + + - md: references/protocol/transactions/pseudo-transaction-types/unlmodify.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/pseudo-transaction-types/unlmodify.md" + targets: + - ja + + - md: references/protocol/transactions/transaction-results/transaction-results.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/transaction-results/transaction-results.md" + targets: + - ja + + - md: references/protocol/transactions/transaction-results/tec-codes.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/transaction-results/tec-codes.md" + targets: + - ja + + - md: references/protocol/transactions/transaction-results/tef-codes.md + targets: + - en + + - md: "@i18n/ja/references/protocol/transactions/transaction-results/tef-codes.md" + targets: + - ja + + - md: references/protocol/transactions/transaction-results/tel-codes.md targets: - en # TODO: update translation - - md: references/protocol-reference/transactions/transaction-types/ammbid.ja.md + - md: "@i18n/ja/references/protocol/transactions/transaction-results/tel-codes.md" outdated_translation: true targets: - ja - - md: references/protocol-reference/transactions/transaction-types/ammcreate.md + - md: references/protocol/transactions/transaction-results/tem-codes.md targets: - en - # TODO: update translation - - md: references/protocol-reference/transactions/transaction-types/ammcreate.ja.md - outdated_translation: true + - md: "@i18n/ja/references/protocol/transactions/transaction-results/tem-codes.md" targets: - ja - # TODO: translate - - md: references/protocol-reference/transactions/transaction-types/ammdelete.md - targets: - - en - - ja - - - md: references/protocol-reference/transactions/transaction-types/ammdeposit.md + - md: references/protocol/transactions/transaction-results/ter-codes.md targets: - en - # TODO: update translation - - md: references/protocol-reference/transactions/transaction-types/ammdeposit.ja.md - outdated_translation: true + - md: "@i18n/ja/references/protocol/transactions/transaction-results/ter-codes.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-types/ammvote.md + - md: references/protocol/transactions/transaction-results/tes-success.md targets: - en - # TODO: update translation - - md: references/protocol-reference/transactions/transaction-types/ammvote.ja.md - outdated_translation: true + - md: "@i18n/ja/references/protocol/transactions/transaction-results/tes-success.md" targets: - ja - - md: references/protocol-reference/transactions/transaction-types/ammwithdraw.md - targets: - - en - - # TODO: update translation - - md: references/protocol-reference/transactions/transaction-types/ammwithdraw.ja.md - outdated_translation: true - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/checkcancel.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/checkcancel.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/checkcash.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/checkcash.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/checkcreate.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/checkcreate.ja.md - targets: - - ja - -# TODO: Translate - - md: references/protocol-reference/transactions/transaction-types/clawback.md - targets: - - en - - ja - - - md: references/protocol-reference/transactions/transaction-types/depositpreauth.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/depositpreauth.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/escrowcancel.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/escrowcancel.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/escrowcreate.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/escrowcreate.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/escrowfinish.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/escrowfinish.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/nftokenburn.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/nftokenburn.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/nftokencanceloffer.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/nftokencreateoffer.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/nftokenmint.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/nftokenmint.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/offercancel.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/offercancel.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/offercreate.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/offercreate.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/payment.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/payment.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelclaim.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelclaim.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelcreate.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelcreate.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelfund.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/paymentchannelfund.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/setregularkey.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/setregularkey.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/signerlistset.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/signerlistset.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/ticketcreate.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/ticketcreate.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-types/trustset.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-types/trustset.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.md - targets: - - en - - - md: references/protocol-reference/transactions/pseudo-transaction-types/pseudo-transaction-types.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.md - targets: - - en - - - md: references/protocol-reference/transactions/pseudo-transaction-types/enableamendment.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/pseudo-transaction-types/setfee.md - targets: - - en - - - md: references/protocol-reference/transactions/pseudo-transaction-types/setfee.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.md - targets: - - en - - - md: references/protocol-reference/transactions/pseudo-transaction-types/unlmodify.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/transaction-results.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/transaction-results.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/tec-codes.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/tec-codes.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/tef-codes.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/tef-codes.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/tel-codes.md - targets: - - en - - # TODO: update translation - - md: references/protocol-reference/transactions/transaction-results/tel-codes.ja.md - outdated_translation: true - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/tem-codes.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/tem-codes.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/ter-codes.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/ter-codes.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-results/tes-success.md - targets: - - en - - - md: references/protocol-reference/transactions/transaction-results/tes-success.ja.md - targets: - - ja - - - md: references/protocol-reference/transactions/transaction-metadata.md + - md: references/protocol/transactions/metadata.md targets: - en # TODO: update translation to latest English version - - md: references/protocol-reference/transactions/transaction-metadata.ja.md + - md: "@i18n/ja/references/protocol/transactions/metadata.md" outdated_translation: true targets: - ja @@ -3051,12 +2867,12 @@ pages: - en - ja - - md: references/protocol-reference/serialization.md + - md: references/protocol/binary-format.md targets: - en # TODO: update translation with new/updated sections from the English version - - md: references/protocol-reference/serialization.ja.md + - md: "@i18n/ja/references/protocol/binary-format.md" outdated_translation: true targets: - ja @@ -3068,7 +2884,7 @@ pages: targets: - en - - md: references/client-libraries.ja.md + - md: "@i18n/ja/references/client-libraries.md" targets: - ja @@ -3102,7 +2918,7 @@ pages: targets: - en - - md: references/xrpljs2-migration-guide.ja.md + - md: "@i18n/ja/references/xrpljs2-migration-guide.md" targets: - ja @@ -3151,19 +2967,11 @@ pages: # HTTP / Websocket APIs References ---------------------------------------------------- - - name: HTTP / WebSocket APIs - html: http-websocket-apis.html - parent: references.html - template: pagetype-category.html.jinja - blurb: Communicate directly with rippled, the core peer-to-peer server that manages the XRP Ledger. + - md: references/http-websocket-apis/index.md targets: - en - - name: HTTP / WebSocket API リファレンス - html: http-websocket-apis.html - parent: references.html - template: pagetype-category.html.jinja - blurb: XRP Ledgerを管理するコアのピアツーピアサーバーであるrippledと直接通信します。 + - md: "@i18n/ja/references/http-websocket-apis/index.md" targets: - ja @@ -3178,11 +2986,11 @@ pages: - en - ja - - md: references/http-websocket-apis/api-conventions/api-conventions.md + - md: references/http-websocket-apis/api-conventions/index.md targets: - en - - md: references/http-websocket-apis/api-conventions/api-conventions.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/index.md" targets: - ja @@ -3190,7 +2998,7 @@ pages: targets: - en - - md: references/http-websocket-apis/api-conventions/request-formatting.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/request-formatting.md" targets: - ja @@ -3198,7 +3006,7 @@ pages: targets: - en - - md: references/http-websocket-apis/api-conventions/response-formatting.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/response-formatting.md" targets: - ja @@ -3206,7 +3014,7 @@ pages: targets: - en - - md: references/http-websocket-apis/api-conventions/error-formatting.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/error-formatting.md" targets: - ja @@ -3214,7 +3022,7 @@ pages: targets: - en - - md: references/http-websocket-apis/api-conventions/markers-and-pagination.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/markers-and-pagination.md" targets: - ja @@ -3228,17 +3036,25 @@ pages: targets: - en - - md: references/http-websocket-apis/api-conventions/rippled-server-states.ja.md + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/rippled-server-states.md" + targets: + - ja + + - md: references/http-websocket-apis/api-conventions/ctid.md + targets: + - en + + - md: "@i18n/ja/references/http-websocket-apis/api-conventions/ctid.md" targets: - ja # rippled Public Methods - - md: references/http-websocket-apis/public-api-methods/public-api-methods.md + - md: references/http-websocket-apis/public-api-methods/index.md targets: - en - - md: references/http-websocket-apis/public-api-methods/public-api-methods.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/index.md" targets: - ja @@ -3252,19 +3068,11 @@ pages: - en - ja - - name: Account Methods - html: account-methods.html - parent: public-api-methods.html - template: pagetype-category.html.jinja - blurb: An account in the XRP Ledger represents a holder of XRP and a sender of transactions. Use these methods to work with account info. + - md: references/http-websocket-apis/public-api-methods/account-methods/index.md targets: - en - - name: Accountメソッド - html: account-methods.html - parent: public-api-methods.html - template: pagetype-category.html.jinja - blurb: XRP Ledgerのアカウントとは、XRPの保有者とトランザクションの送信者を意味します。以下のメソッドを使用して、アカウント情報を処理することができます。 + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/index.md" targets: - ja @@ -3272,7 +3080,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/account-methods/account_channels.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_channels.md" targets: - ja @@ -3281,7 +3089,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/public-api-methods/account-methods/account_currencies.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_currencies.md" outdated_translation: true targets: - ja @@ -3291,7 +3099,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/public-api-methods/account-methods/account_info.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_info.md" outdated_translation: true targets: - ja @@ -3301,7 +3109,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/public-api-methods/account-methods/account_lines.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_lines.md" outdated_translation: true targets: - ja @@ -3310,7 +3118,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/account-methods/account_nfts.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_nfts.md" targets: - ja @@ -3319,7 +3127,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/public-api-methods/account-methods/account_objects.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_objects.md" outdated_translation: true targets: - ja @@ -3329,7 +3137,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/public-api-methods/account-methods/account_offers.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_offers.md" outdated_translation: true targets: - ja @@ -3338,7 +3146,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/account-methods/account_tx.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/account_tx.md" targets: - ja @@ -3346,7 +3154,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/gateway_balances.md" targets: - ja @@ -3354,23 +3162,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/account-methods/noripple_check.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/account-methods/noripple_check.md" targets: - ja - - name: Ledger Methods - html: ledger-methods.html - parent: public-api-methods.html - blurb: A ledger version contains a header, a transaction tree, and a state tree, which contain account settings, trustlines, balances, transactions, and other data. Use these methods to retrieve ledger info. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/ledger-methods/index.md targets: - en - - name: Ledgerメソッド - html: ledger-methods.html - parent: public-api-methods.html - blurb: レジャーバージョンには、ヘッダー、トランザクションツリー、状態ツリーが含まれ、さらにその中にアカウント設定、トラストライン、残高、トランザクション、その他のデータが含まれます。以下のメソッドを使用して、レジャー情報を取得することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/index.md" targets: - ja @@ -3378,7 +3178,8 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/ledger-methods/ledger.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md" + outdated_translation: true targets: - ja @@ -3386,7 +3187,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_closed.md" targets: - ja @@ -3394,7 +3195,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_current.md" targets: - ja @@ -3402,7 +3203,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_data.md" targets: - ja @@ -3411,23 +3212,15 @@ pages: - en # TODO: update the translation of this page - - md: references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.md" targets: - ja - - name: Transaction Methods - html: transaction-methods.html # watch for clashes w/ this filename - parent: public-api-methods.html - template: pagetype-category.html.jinja - blurb: Transactions are the only thing that can modify the shared state of the XRP Ledger. All business on the XRP Ledger takes the form of transactions. Use these methods to work with transactions. # TODO: translate + - md: references/http-websocket-apis/public-api-methods/transaction-methods/index.md targets: - en - - name: Transactionメソッド - html: transaction-methods.html # watch for clashes w/ this filename - parent: public-api-methods.html - template: pagetype-category.html.jinja - blurb: トランザクションだけが、XRP Ledgerの共有されている状態を変更できます。XRP Ledgerに対するすべてのビジネスはトランザクションの形態をとります。以下のメソッドを使用して、トランザクションを処理します。 + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/index.md" targets: - ja @@ -3435,7 +3228,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/transaction-methods/submit.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit.md" targets: - ja @@ -3443,7 +3236,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/submit_multisigned.md" targets: - ja @@ -3451,7 +3244,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/transaction_entry.md" targets: - ja @@ -3459,7 +3252,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/transaction-methods/tx.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx.md" targets: - ja @@ -3467,23 +3260,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/transaction-methods/tx_history.md" targets: - ja - - name: Path and Order Book Methods - html: path-and-order-book-methods.html - parent: public-api-methods.html - blurb: Paths define a way for payments to flow through intermediary steps on their way from sender to receiver. Paths enable cross-currency payments by connecting sender and receiver through order books. Use these methods to work with paths and other books. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md targets: - en - - name: PathおよびOrderBookのメソッド - html: path-and-order-book-methods.html - parent: public-api-methods.html - blurb: パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、複数通貨間の支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md" targets: - ja @@ -3492,7 +3277,7 @@ pages: - en # TODO: update translation - - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/amm_info.md" outdated_translation: true targets: - ja @@ -3501,7 +3286,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/book_offers.md" targets: - ja @@ -3509,7 +3294,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized.md" targets: - ja @@ -3529,7 +3314,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/path_find.md" targets: - ja @@ -3537,23 +3322,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/ripple_path_find.md" targets: - ja - - name: Payment Channel Methods - html: payment-channel-methods.html - parent: public-api-methods.html - blurb: Payment channels are a tool for facilitating repeated, unidirectional payments, or temporary credit between two parties. Use these methods to work with payment channels. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md targets: - en - - name: Payment Channelメソッド - html: payment-channel-methods.html - parent: public-api-methods.html - blurb: Payment Channelは、2者間で繰り返される一方向の支払いや一時的な与信を可能にするためのツールです。これらのメソッドを使用して、Payment Channelを使用することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/index.md" targets: - ja @@ -3561,7 +3338,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize.md" targets: - ja @@ -3569,24 +3346,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify.md" targets: - ja - # TODO: translate title & blurb - - name: Subscription Methods - html: subscription-methods.html - parent: public-api-methods.html - blurb: Use these methods to enable the server to push updates to your client when various events happen, so that you can know and react right away. WebSocket API only. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/subscription-methods/index.md targets: - en - - name: Subscriptionメソッド - html: subscription-methods.html - parent: public-api-methods.html - blurb: 以下のメソッドを使用して、さまざまなイベントが発生したときに更新情報をサーバーからクライアントにプッシュできるようになるため、即座に情報を取得することができます。WebSocket APIのみ対応しています。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/index.md" targets: - ja @@ -3594,7 +3362,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md" targets: - ja @@ -3602,23 +3370,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/subscription-methods/unsubscribe.md" targets: - ja - - name: Server Info Methods - html: server-info-methods.html - parent: public-api-methods.html - blurb: Use these methods to retrieve information about the current state of the rippled server. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/server-info-methods/index.md targets: - en - - name: Server Infoメソッド - html: server-info-methods.html - parent: public-api-methods.html - blurb: 以下のメソッドを使用して、rippledサーバーの現在の状態についての情報を取得することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/index.md" targets: - ja @@ -3626,7 +3386,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/server-info-methods/fee.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/fee.md" targets: - ja @@ -3641,7 +3401,7 @@ pages: - en # TODO: update translation with reporting fields, ports field, ETL source object, corrected state_account.*.transitions field - - md: references/http-websocket-apis/public-api-methods/server-info-methods/server_info.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_info.md" outdated_translation: true targets: - ja @@ -3651,29 +3411,22 @@ pages: - en # TODO: update translation with reporting fields, ports field, ETL source object, corrected state_account.*.transitions field - - md: references/http-websocket-apis/public-api-methods/server-info-methods/server_state.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/server-info-methods/server_state.md" outdated_translation: true targets: - ja - - name: Clio Server - html: clio-methods.html - parent: public-api-methods.html - blurb: Use these methods to retrieve information using Clio server APIs. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/clio-server/index.md targets: - en - - name: Clio Serverメソッド - html: clio-methods.html - parent: public-api-methods.html - blurb: 以下のメソッドを使用して、ClioサーバーのAPIから情報を取得することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/clio-server/index.md" targets: - ja # TODO: translate - md: references/http-websocket-apis/public-api-methods/clio-methods/server_info-clio.md + outdated_translation: true targets: - en - ja @@ -3696,19 +3449,11 @@ pages: - en - ja - - name: Utility Methods - html: utility-methods.html - parent: public-api-methods.html - blurb: Use these methods to perform convenient tasks, such as ping and random number generation. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/public-api-methods/utility-methods/index.md targets: - en - - name: ユーティリティメソッド - html: utility-methods.html - parent: public-api-methods.html - blurb: 以下のメソッドを使用して、Pingや乱数生成などの便利な処理を行うことができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/index.md" targets: - ja @@ -3716,7 +3461,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/utility-methods/json.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/json.md" targets: - ja @@ -3724,7 +3469,7 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/utility-methods/ping.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/ping.md" targets: - ja @@ -3732,15 +3477,15 @@ pages: targets: - en - - md: references/http-websocket-apis/public-api-methods/utility-methods/random.ja.md + - md: "@i18n/ja/references/http-websocket-apis/public-api-methods/utility-methods/random.md" targets: - ja - - md: references/http-websocket-apis/admin-api-methods/admin-api-methods.md + - md: references/http-websocket-apis/admin-api-methods/index.md targets: - en - - md: references/http-websocket-apis/admin-api-methods/admin-api-methods.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/index.md" targets: - ja @@ -3755,19 +3500,11 @@ pages: - en - ja - - name: Key Generation Methods - html: key-generation-methods.html - parent: admin-api-methods.html - blurb: Use these methods to generate and manage keys. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md targets: - en - - name: キー生成メソッド - html: key-generation-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用してキーを生成および管理することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/index.md" targets: - ja @@ -3775,7 +3512,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/validation_create.md" targets: - ja @@ -3783,23 +3520,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/key-generation-methods/wallet_propose.md" targets: - ja - - name: Logging and Data Management Methods - html: logging-and-data-management-methods.html - parent: admin-api-methods.html - blurb: Use these methods to manage log levels and other data, such as ledgers. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md targets: - en - - name: ログとデータの管理メソッド - html: logging-and-data-management-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用して、ログレベルや台帳などのデータを管理することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/index.md" targets: - ja @@ -3807,7 +3536,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/can_delete.md" targets: - ja @@ -3815,7 +3544,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/crawl_shards.md" targets: - ja @@ -3823,7 +3552,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/download_shard.md" targets: - ja @@ -3831,7 +3560,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_cleaner.md" targets: - ja @@ -3839,7 +3568,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/ledger_request.md" targets: - ja @@ -3847,7 +3576,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/log_level.md" targets: - ja @@ -3855,7 +3584,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/logrotate.md" targets: - ja @@ -3863,23 +3592,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/logging-and-data-management-methods/node_to_shard.md" targets: - ja - - name: Server Control Methods - html: server-control-methods.html - parent: admin-api-methods.html - blurb: Use these methods to manage the rippled server. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/server-control-methods/index.md targets: - en - - name: サーバ操作メソッド - html: server-control-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用して、rippledサーバーを管理することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/index.md" targets: - ja @@ -3887,7 +3608,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/ledger_accept.md" targets: - ja @@ -3895,7 +3616,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/server-control-methods/stop.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/stop.md" targets: - ja @@ -3903,23 +3624,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/server-control-methods/validation_seed.md" targets: - ja - - name: Signing Methods - html: signing-methods.html - parent: admin-api-methods.html - blurb: Use these methods to work with transactions. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/signing-methods/index.md targets: - en - - name: 署名メソッド - html: signing-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用して、トランザクションを扱うことができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/index.md" targets: - ja @@ -3927,7 +3640,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/signing-methods/sign.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign.md" targets: - ja @@ -3935,23 +3648,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/signing-methods/sign_for.md" targets: - ja - - name: Peer Management Methods - html: peer-management-methods.html - parent: admin-api-methods.html - blurb: Use these methods to manage your server's peer-to-peer connections. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md targets: - en - - name: ピア管理メソッド - html: peer-management-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用して、サーバーのピアツーピア接続を管理することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/index.md" targets: - ja @@ -3959,7 +3664,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/connect.md" targets: - ja @@ -3967,7 +3672,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_add.md" targets: - ja @@ -3975,7 +3680,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_del.md" targets: - ja @@ -3983,7 +3688,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peer_reservations_list.md" targets: - ja @@ -3991,23 +3696,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/peer-management-methods/peers.md" targets: - ja - - name: Status and Debugging Methods - html: status-and-debugging-methods.html - parent: admin-api-methods.html - blurb: Use these methods to check the status of the network and server. - template: pagetype-category.html.jinja + - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md targets: - en - - name: ステータスとデバッグのメソッド - html: status-and-debugging-methods.html - parent: admin-api-methods.html - blurb: 以下のメソッドを使用して、ネットワークとサーバーのステータスを確認することができます。 - template: pagetype-category.html.jinja + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/index.md" targets: - ja @@ -4015,7 +3712,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/consensus_info.md" targets: - ja @@ -4024,7 +3721,7 @@ pages: - en # TODO: update translation for rippled v1.11.0 - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/feature.md" outdated_translation: true targets: - ja @@ -4033,7 +3730,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/fetch_info.md" targets: - ja @@ -4041,7 +3738,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/get_counts.md" targets: - ja @@ -4049,7 +3746,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/print.md" targets: - ja @@ -4063,7 +3760,7 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validator_list_sites.md" targets: - ja @@ -4071,24 +3768,15 @@ pages: targets: - en - - md: references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.ja.md + - md: "@i18n/ja/references/http-websocket-apis/admin-api-methods/status-and-debugging-methods/validators.md" targets: - ja - # TODO: translate title & blurb - - name: Peer Port Methods - html: peer-port-methods.html - parent: http-websocket-apis.html - template: pagetype-category.html.jinja - blurb: Special API method for sharing network topology and status metrics. + - md: references/http-websocket-apis/peer-port-methods/index.md targets: - en - - name: ピアポートメソッド - html: peer-port-methods.html - parent: http-websocket-apis.html - template: pagetype-category.html.jinja - blurb: ネットワークトポロジーやステータスメトリクスを共有するための特別なAPIメソッドです。 + - md: "@i18n/ja/references/http-websocket-apis/peer-port-methods/index.md" targets: - ja @@ -4120,7 +3808,7 @@ pages: targets: - en - - md: references/xrp-api.ja.md + - md: "@i18n/ja/references/xrp-api.md" targets: - ja @@ -4129,7 +3817,7 @@ pages: targets: - en - - md: references/data-api.ja.md + - md: "@i18n/ja/references/data-api.md" targets: - ja @@ -4137,31 +3825,433 @@ pages: targets: - en - - md: references/xrp-ledger-toml.ja.md + - md: "@i18n/ja/references/xrp-ledger-toml.md" targets: - ja # Infrastructure --------------------------------------------------------------- - - name: Infrastructure - html: infrastructure.html - parent: docs.html - blurb: Install, configure, and manage the software that powers the XRP Ledger. - template: pagetype-category.html.jinja - top_nav_grouping: Article Types + - md: infrastructure/index.md targets: - en - - name: インフラストラクチャ - html: infrastructure.html - parent: docs.html - blurb: XRP Ledgerを動かすソフトウェアのインストール、設定、管理。 - template: pagetype-category.html.jinja - top_nav_grouping: カテゴリ + - md: "@i18n/ja/infrastructure/index.md" targets: - ja - # Redirect old landing + + - md: infrastructure/commandline-usage.md + targets: + - en + + - md: "@i18n/ja/infrastructure/commandline-usage.md" + targets: + - ja + + - md: infrastructure/installation/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/index.md" + targets: + - ja + + - md: infrastructure/installation/system-requirements.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/system-requirements.md" + targets: + - ja + + - md: infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/install-rippled-on-centos-rhel-with-yum.md" + targets: + - ja + + - md: infrastructure/installation/install-rippled-on-ubuntu.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/install-rippled-on-ubuntu.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/installation/install-clio-on-ubuntu.md + targets: + - en + - ja + + - md: infrastructure/installation/update-rippled-automatically-on-linux.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/update-rippled-automatically-on-linux.md" + targets: + - ja + + - md: infrastructure/installation/update-rippled-manually-on-centos-rhel.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/update-rippled-manually-on-centos-rhel.md" + targets: + - ja + + - md: infrastructure/installation/update-rippled-manually-on-ubuntu.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/update-rippled-manually-on-ubuntu.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/installation/build-on-linux-mac-windows.md + targets: + - en + - ja + + - md: infrastructure/installation/build-run-rippled-in-reporting-mode.md + targets: + - en + + # TODO: translate + - md: infrastructure/installation/build-run-rippled-in-reporting-mode.md + top_nav_grouping: 人気ページ + untranslated_warning: true + targets: + - ja + + - md: infrastructure/installation/capacity-planning.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/capacity-planning.md" + targets: + - ja + + - md: infrastructure/installation/rippled-1-3-migration-instructions.md + targets: + - en + + - md: "@i18n/ja/infrastructure/installation/rippled-1-3-migration-instructions.md" + targets: + - ja + + - md: infrastructure/configuration/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/index.md" + targets: + - ja + + - md: infrastructure/configuration/server-modes/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/server-modes/index.md" + targets: + - ja + + - md: infrastructure/configuration/server-modes/run-rippled-as-a-validator.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-validator.md" + targets: + - ja + + - md: infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md + targets: + - en + + # TODO: update this translation and rename the file like in the English version + - md: "@i18n/ja/infrastructure/configuration/server-modes/run-rippled-as-a-stock-server.md" + outdated_translation: true + targets: + - ja + + - md: infrastructure/configuration/data-retention/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/index.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/configure-full-history.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/configure-full-history.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/online-deletion.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/online-deletion.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/configure-online-deletion.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/configure-online-deletion.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/configure-advisory-deletion.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/configure-advisory-deletion.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/history-sharding.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/history-sharding.md" + targets: + - ja + + - md: infrastructure/configuration/data-retention/configure-history-sharding.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/data-retention/configure-history-sharding.md" + targets: + - ja + + - md: infrastructure/configuration/peering/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/index.md" + targets: + - ja + + - md: infrastructure/configuration/peering/cluster-rippled-servers.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/cluster-rippled-servers.md" + targets: + - ja + + - md: infrastructure/configuration/peering/configure-a-private-server.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/configure-a-private-server.md" + targets: + - ja + + - md: infrastructure/configuration/peering/configure-the-peer-crawler.md + targets: + - en + + # TODO: translate this page. # For now we just have a translated blurb. + - md: infrastructure/configuration/peering/configure-the-peer-crawler.md + blurb: rippledサーバーがステータスとピアについてどの程度の情報を公表するか設定します。 + untranslated_warning: true + targets: + - ja + + # TODO: translate this page + - md: infrastructure/configuration/peering/enable-link-compression.md + targets: + - en + - ja + + - md: infrastructure/configuration/peering/forward-ports-for-peering.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/forward-ports-for-peering.md" + targets: + - ja + + - md: infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/manually-connect-to-a-specific-peer.md" + targets: + - ja + + - md: infrastructure/configuration/peering/set-max-number-of-peers.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/set-max-number-of-peers.md" + targets: + - ja + + - md: infrastructure/configuration/peering/use-a-peer-reservation.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/peering/use-a-peer-reservation.md" + targets: + - ja + + - md: infrastructure/configuration/configure-amendment-voting.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/configure-amendment-voting.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/configuration/configure-statsd.md + targets: + - en + - ja + + - md: infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md" + outdated_translation: true + targets: + - ja + + # TODO: translate page + - md: infrastructure/configuration/configure-grpc.md + targets: + - en + - ja + + - md: infrastructure/configuration/enable-public-signing.md + targets: + - en + + - md: "@i18n/ja/infrastructure/configuration/enable-public-signing.md" + targets: + - ja + + - md: infrastructure/testing-and-auditing/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/testing-and-auditing/index.md" + targets: + - ja + + - md: infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md + targets: + - en + + - md: "@i18n/ja/infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md" + targets: + - ja + + - md: infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md + targets: + - en + + - md: "@i18n/ja/infrastructure/testing-and-auditing/load-a-saved-ledger-in-stand-alone-mode.md" + targets: + - ja + + - md: infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md + targets: + - en + + - md: "@i18n/ja/infrastructure/testing-and-auditing/advance-the-ledger-in-stand-alone-mode.md" + targets: + - ja + + - md: infrastructure/testing-and-auditing/test-amendments.md + targets: + - en + + - md: "@i18n/ja/infrastructure/testing-and-auditing/test-amendments.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/testing-and-auditing/run-private-network-with-docker.md + targets: + - en + - ja + + - md: infrastructure/troubleshooting/index.md + targets: + - en + + - md: "@i18n/ja/infrastructure/troubleshooting/index.md" + targets: + - ja + + - md: infrastructure/troubleshooting/diagnosing-problems.md + targets: + - en + + - md: "@i18n/ja/infrastructure/troubleshooting/diagnosing-problems.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/troubleshooting/health-check-interventions.md + targets: + - en + - ja + + - md: infrastructure/troubleshooting/understanding-log-messages.md + targets: + - en + + - md: "@i18n/ja/infrastructure/troubleshooting/understanding-log-messages.md" + targets: + - ja + + - md: infrastructure/troubleshooting/server-doesnt-sync.md + targets: + - en + + # TODO: translate the blurb in this page's frontmatter + - md: "@i18n/ja/infrastructure/troubleshooting/server-doesnt-sync.md" + targets: + - ja + + # TODO: translate + - md: infrastructure/troubleshooting/server-is-amendment-blocked.md + targets: + - en + - ja + + - md: infrastructure/troubleshooting/server-wont-start.md + targets: + - en + + - md: "@i18n/ja/infrastructure/troubleshooting/server-wont-start.md" + targets: + - ja + + - md: infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md + targets: + - en + + - md: "@i18n/ja/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md" + targets: + - ja + + # Redirects for old infrastructure pages + - name: Manage the rippled server html: manage-the-rippled-server.html template: pagetype-redirect.html.jinja @@ -4171,69 +4261,22 @@ pages: - en - ja - - md: infrastructure/rippled/commandline-usage.md - targets: - - en - - # TODO: update translation - - md: infrastructure/rippled/commandline-usage.ja.md - outdated_translation: true - targets: - - ja - - - name: Install rippled - html: install-rippled.html - parent: infrastructure.html - top_nav_name: Install & Configure - blurb: Install and update the rippled server. - template: pagetype-category.html.jinja - targets: - - en - - - name: rippledのインストール - html: install-rippled.html - parent: infrastructure.html - blurb: rippledサーバーをインストールして更新します。 - template: pagetype-category.html.jinja - targets: - - ja - - - md: infrastructure/rippled/installation/system-requirements.md - targets: - - en - - - md: infrastructure/rippled/installation/system-requirements.ja.md - targets: - - ja - - - md: infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.md - targets: - - en - - - md: infrastructure/rippled/installation/install-rippled-on-centos-rhel-with-yum.ja.md - targets: - - ja - - # Redirect old Alien-based install - - name: Install rippled on Ubuntu with Alien - html: install-rippled-on-ubuntu-with-alien.html - parent: install-rippled.html + - name: Build and Run rippled on Ubuntu + html: build-run-rippled-ubuntu.html template: pagetype-redirect.html.jinja - nav_omit: true - redirect_url: install-rippled-on-ubuntu.html + redirect_url: build-on-linux-mac-windows.html targets: - en - ja - - md: infrastructure/rippled/installation/install-rippled-on-ubuntu.md + - name: Build and Run rippled on macOS + html: build-run-rippled-macos.html + template: pagetype-redirect.html.jinja + redirect_url: build-on-linux-mac-windows.html targets: - en - - - md: infrastructure/rippled/installation/install-rippled-on-ubuntu.ja.md - targets: - ja - # Redirect old CentOS/RHEL install - name: Update rippled Automatically on CentOS/RHEL html: update-rippled-automatically-on-centos-rhel.html template: pagetype-redirect.html.jinja @@ -4243,410 +4286,15 @@ pages: - en - ja - - md: infrastructure/rippled/installation/update-rippled-automatically-on-linux.md - targets: - - en - - - md: infrastructure/rippled/installation/update-rippled-automatically-on-linux.ja.md - targets: - - ja - - - md: infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.md - targets: - - en - - - md: infrastructure/rippled/installation/update-rippled-manually-on-centos-rhel.ja.md - targets: - - ja - - - md: infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.md - targets: - - en - - - md: infrastructure/rippled/installation/update-rippled-manually-on-ubuntu.ja.md - targets: - - ja - - # Redirect to build instructions on rippled repo. - - name: Build and Run rippled on Ubuntu - html: build-run-rippled-ubuntu.html + - name: Install rippled on Ubuntu with Alien + html: install-rippled-on-ubuntu-with-alien.html template: pagetype-redirect.html.jinja - redirect_url: https://github.com/XRPLF/rippled/blob/release/BUILD.md + nav_omit: true + redirect_url: install-rippled-on-ubuntu.html targets: - en - ja - # Redirect to build instructions on rippled repo. - - name: Build and Run rippled on macOS - html: build-run-rippled-macos.html - template: pagetype-redirect.html.jinja - redirect_url: https://github.com/XRPLF/rippled/blob/release/BUILD.md - targets: - - en - - ja - - - md: infrastructure/rippled/installation/build-run-rippled-in-reporting-mode.md - targets: - - en - - # TODO: translate - - md: infrastructure/rippled/installation/build-run-rippled-in-reporting-mode.md - top_nav_grouping: 人気ページ - untranslated_warning: true - targets: - - ja - - - md: infrastructure/rippled/installation/capacity-planning.md - targets: - - en - - - md: infrastructure/rippled/installation/capacity-planning.ja.md - targets: - - ja - - - md: infrastructure/rippled/installation/rippled-1-3-migration-instructions.md - targets: - - en - - - md: infrastructure/rippled/installation/rippled-1-3-migration-instructions.ja.md - targets: - - ja - - - name: Configure rippled - html: configure-rippled.html - parent: infrastructure.html - blurb: Customize your rippled server configuration. - template: pagetype-category.html.jinja - targets: - - en - - - name: rippledの設定 - html: configure-rippled.html - parent: infrastructure.html - blurb: rippledサーバーの構成をカスタマイズします。 - template: pagetype-category.html.jinja - targets: - - ja - - - name: Server Modes - html: server-modes.html - parent: configure-rippled.html - template: pagetype-category.html.jinja - targets: - - en - - ja - - - md: infrastructure/rippled/configuration/run-rippled-as-a-validator.md - targets: - - en - - - md: infrastructure/rippled/configuration/run-rippled-as-a-validator.ja.md - targets: - - ja - - - md: infrastructure/rippled/configuration/run-rippled-as-a-stock-server.md - targets: - - en - - # TODO: update this translation and rename the file like in the English version - - md: infrastructure/rippled/configuration/run-rippled-as-a-wallet-server.ja.md - targets: - - ja - - - name: Data Retention - html: data-retention.html - parent: configure-rippled.html - template: pagetype-category.html.jinja - targets: - - en - - ja - - - md: infrastructure/rippled/configuration/configure-full-history.md - targets: - - en - - - md: infrastructure/rippled/configuration/configure-full-history.ja.md - targets: - - ja - - - md: concepts/networks-and-servers/ledger-history/online-deletion.md - targets: - - en - - - md: concepts/networks-and-servers/ledger-history/online-deletion.ja.md - targets: - - ja - - - md: infrastructure/rippled/configuration/configure-online-deletion.md - targets: - - en - - - md: infrastructure/rippled/configuration/configure-online-deletion.ja.md - targets: - - ja - - - md: infrastructure/rippled/configuration/configure-advisory-deletion.md - targets: - - en - - - md: infrastructure/rippled/configuration/configure-advisory-deletion.ja.md - targets: - - ja - - - md: concepts/networks-and-servers/ledger-history/history-sharding.md - targets: - - en - - - md: concepts/networks-and-servers/ledger-history/history-sharding.ja.md - targets: - - ja - - - md: infrastructure/rippled/configuration/configure-history-sharding.md - targets: - - en - - - md: infrastructure/rippled/configuration/configure-history-sharding.ja.md - targets: - - ja - - - md: infrastructure/rippled/configuration/configure-amendment-voting.md - targets: - - en - - - md: infrastructure/rippled/configuration/configure-amendment-voting.ja.md - targets: - - ja - - # TODO: translate - - md: infrastructure/rippled/configuration/test-amendments.md - targets: - - en - - ja - - # TODO: translate - - md: infrastructure/rippled/configuration/configure-statsd.md - targets: - - en - - ja - - - md: infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.md - targets: - - en - - - md: infrastructure/rippled/configuration/connect-your-rippled-to-the-xrp-test-net.ja.md - targets: - - ja - - # TODO: translate page - - md: infrastructure/rippled/configuration/configure-grpc.md - targets: - - en - - ja - - - md: infrastructure/rippled/configuration/enable-public-signing.md - targets: - - en - - - md: infrastructure/rippled/configuration/enable-public-signing.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/configure-peering.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/configure-peering.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/cluster-rippled-servers.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/cluster-rippled-servers.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/configure-a-private-server.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/configure-a-private-server.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/configure-the-peer-crawler.md - targets: - - en - - # TODO: translate this page. # For now we just have a translated blurb. - - md: infrastructure/rippled/configure-peering/configure-the-peer-crawler.md - blurb: rippledサーバーがステータスとピアについてどの程度の情報を公表するか設定します。 - untranslated_warning: true - targets: - - ja - - # TODO: translate this page - - md: infrastructure/rippled/configure-peering/enable-link-compression.md - targets: - - en - - ja - - - md: infrastructure/rippled/configure-peering/forward-ports-for-peering.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/forward-ports-for-peering.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/manually-connect-to-a-specific-peer.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/set-max-number-of-peers.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/set-max-number-of-peers.ja.md - targets: - - ja - - - md: infrastructure/rippled/configure-peering/use-a-peer-reservation.md - targets: - - en - - - md: infrastructure/rippled/configure-peering/use-a-peer-reservation.ja.md - targets: - - ja - - - name: Testing and Auditing - html: use-stand-alone-mode.html - parent: infrastructure.html - blurb: For new features and experiments, you can use Stand-Alone Mode to test features with a full network. - template: pagetype-category.html.jinja - targets: - - en - - # TODO: Translate page name. - - name: スタンドアロンモードでrippledをテスト - html: use-stand-alone-mode.html - parent: infrastructure.html - blurb: 新機能や実験用に、スタンドアロンモードを使用してフルネットワークで機能をテストできます。 - template: pagetype-category.html.jinja - targets: - - ja - - - md: infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.md - targets: - - en - - - md: infrastructure/rippled/stand-alone-mode/start-a-new-genesis-ledger-in-stand-alone-mode.ja.md - targets: - - ja - - - md: infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.md - targets: - - en - - - md: infrastructure/rippled/stand-alone-mode/load-a-saved-ledger-in-stand-alone-mode.ja.md - targets: - - ja - - - md: infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.md - targets: - - en - - - md: infrastructure/rippled/stand-alone-mode/advance-the-ledger-in-stand-alone-mode.ja.md - targets: - - ja - - - name: Troubleshooting - html: troubleshoot-the-rippled-server.html - parent: infrastructure.html - blurb: Troubleshoot all kinds of problems with the rippled server. - template: pagetype-category.html.jinja - targets: - - en - - - name: rippledのトラブルシューティング - html: troubleshoot-the-rippled-server.html - parent: infrastructure.html - blurb: rippledサーバーのあらゆる種類の問題をトラブルシューティングします。 - template: pagetype-category.html.jinja - targets: - - ja - - - md: infrastructure/rippled/troubleshooting/diagnosing-problems.md - targets: - - en - - - md: infrastructure/rippled/troubleshooting/diagnosing-problems.ja.md - targets: - - ja - - # TODO: translate - - md: infrastructure/rippled/troubleshooting/health-check-interventions.md - targets: - - en - - ja - - - md: infrastructure/rippled/troubleshooting/understanding-log-messages.md - targets: - - en - - - md: infrastructure/rippled/troubleshooting/understanding-log-messages.ja.md - targets: - - ja - - - md: infrastructure/rippled/troubleshooting/server-doesnt-sync.md - targets: - - en - - # TODO: translate the blurb in this page's frontmatter - - md: infrastructure/rippled/troubleshooting/server-doesnt-sync.ja.md - targets: - - ja - - # TODO: translate - - md: infrastructure/rippled/troubleshooting/server-is-amendment-blocked.md - targets: - - en - - ja - - - md: infrastructure/rippled/troubleshooting/server-wont-start.md - targets: - - en - - - md: infrastructure/rippled/troubleshooting/server-wont-start.ja.md - targets: - - ja - - - md: infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.md - targets: - - en - - - md: infrastructure/rippled/troubleshooting/fix-sqlite-tx-db-page-size-issue.ja.md - targets: - - ja - - # TODO: translate - - md: infrastructure/clio/install-clio-on-ubuntu.md - targets: - - en - - ja - - # TODO: translate - - md: infrastructure/rippled/run-private-network-with-docker.md - targets: - - en - - ja - - # # Landing pages for labels ------------------------------------------------- # - name: Accounts # html: label-accounts.html @@ -5145,20 +4793,11 @@ pages: - ja # Resources tab --------------------------------------------------------------- - - name: Resources - html: resources.html - parent: index.html - # Temporary: redirect to Dev Tools Eventually this should become a real landing page. - template: pagetype-category.html.jinja - blurb: Other resources to help understand the XRP Ledger and develop on it. + - md: resources/index.md targets: - en - - name: リソース - html: resources.html - parent: index.html - template: pagetype-category.html.jinja - blurb: XRP Ledgerの理解や開発ためのリソース。Other resources to help understand the XRPL and develop on it. + - md: "@i18n/ja/resources/index.md" targets: - ja @@ -5341,6 +4980,21 @@ pages: top_nav_grouping: 開発 targets: - ja + - name: XRPL Brand Kit + html: https://xrpl.org/assets/XRPL_Brand_Kit.zip + parent: resources.html + blurb: Review guidelines for using XRPL design assets. + top_nav_grouping: Development + targets: + - en + + - name: XRPLブランドキット + html: https://xrpl.org/assets/XRPL_Brand_Kit.zip + parent: resources.html + blurb: XRPLのデザインアセットのガイドラインを確認しましょう。 + top_nav_grouping: 開発 + targets: + - ja - name: Ledger Explorer html: https://livenet.xrpl.org/ @@ -5361,7 +5015,7 @@ pages: targets: - en - - md: resources/known-amendments.ja.md + - md: "@i18n/ja/resources/known-amendments.md" top_nav_grouping: 現在のステータス targets: - ja @@ -5374,7 +5028,7 @@ pages: targets: - en - - md: resources/contribute-code/contribute-code.ja.md + - md: "@i18n/ja/resources/contribute-code/contribute-code.md" top_nav_grouping: 参加する targets: - ja @@ -5383,18 +5037,19 @@ pages: targets: - en - - md: resources/contribute-code/create-custom-transactors.ja.md + - md: "@i18n/ja/resources/contribute-code/create-custom-transactors.md" targets: - ja # Contribute Documentation ------------------------------------------------ - - md: resources/contribute-documentation/contribute-documentation.md + - md: resources/contribute-documentation/index.md top_nav_grouping: Join In targets: - en - - md: resources/contribute-documentation/contribute-documentation.ja.md + - md: "@i18n/ja/resources/contribute-documentation/index.md" + outdated_translation: true top_nav_grouping: 参加する targets: - ja @@ -5415,7 +5070,7 @@ pages: targets: - en - - md: resources/contribute-documentation/documentation-translations.ja.md + - md: "@i18n/ja/resources/contribute-documentation/documentation-translations.md" targets: - ja @@ -5423,7 +5078,7 @@ pages: targets: - en - - md: resources/contribute-documentation/creating-diagrams.ja.md + - md: "@i18n/ja/resources/contribute-documentation/creating-diagrams.md" targets: - ja @@ -5431,7 +5086,7 @@ pages: targets: - en - - md: resources/contribute-documentation/tutorial-guidelines.ja.md + - md: "@i18n/ja/resources/contribute-documentation/tutorial-guidelines.md" targets: - ja @@ -5439,7 +5094,7 @@ pages: targets: - en - - md: resources/contribute-documentation/tutorial-structure.ja.md + - md: "@i18n/ja/resources/contribute-documentation/tutorial-structure.md" targets: - ja @@ -5591,25 +5246,11 @@ pages: targets: - ja - - name: XRPL Brand Kit - html: https://github.com/XRPLF/xrpl-dev-portal/raw/master/content/XRPL_Logo_Kit.zip - parent: contribute.html - blurb: Review guidelines for using XRPL design assets. - targets: - - en - - - name: XRPLブランドキット - html: https://github.com/XRPLF/xrpl-dev-portal/raw/master/content/XRPL_Logo_Kit.zip - parent: contribute.html - blurb: XRPLのデザインアセットのガイドラインを確認しましょう。 - targets: - - ja - - md: contributing/report-a-scam.md targets: - en - - md: contributing/report-a-scam.ja.md + - md: "@i18n/ja/contributing/report-a-scam.md" targets: - ja diff --git a/img/address-encoding.ja.svg b/img/address-encoding.ja.svg new file mode 100644 index 0000000000..3966fbff5d --- /dev/null +++ b/img/address-encoding.ja.svg @@ -0,0 +1,155 @@ + + ++アドレスのエンコードbase58チェックサム(4バイト)タイプ接頭辞0x00(XRPL base58の 「r」)アドレスタイプ接頭辞(1バイト)AccountID (20バイト)チェックサム(4バイト)Account ID(20バイト)マスター公開鍵33バイト (secp256k1)0xED + 32バイト (Ed25519)SHA-256を2回SHA-256のRIPEMD160 diff --git a/img/cryptographic-keys.ja.svg b/img/cryptographic-keys.ja.svg new file mode 100644 index 0000000000..cbcaec8c0d --- /dev/null +++ b/img/cryptographic-keys.ja.svg @@ -0,0 +1,144 @@ + + +アドレス25バイト (クラシック)32バイト (X-アドレス)公開情報機密Account ID20バイト公開鍵33バイト秘密鍵32バイトパスフレーズまたは乱数ソース(任意)シード(任意)16バイト diff --git a/img/issued-currency-funds-flow.ja.svg b/img/issued-currency-funds-flow.ja.svg new file mode 100644 index 0000000000..f4ad975417 --- /dev/null +++ b/img/issued-currency-funds-flow.ja.svg @@ -0,0 +1,211 @@ + + +補充融資XRP Ledgerアドレス会計関係(トラストライン)送信 / 支払い凡例運用アドレス(自動)パートナー, 流動性プロバイダー,顧客待機アドレス(手動)発行アドレス(最高水準のセキュリティ)償還発行 diff --git a/img/key-derivation-ed25519.ja.svg b/img/key-derivation-ed25519.ja.svg new file mode 100644 index 0000000000..e4afda6749 --- /dev/null +++ b/img/key-derivation-ed25519.ja.svg @@ -0,0 +1,127 @@ + + +0xED接頭辞(1バイト)公開鍵(32バイト)秘密鍵(32バイト)シード(16バイト)パスフレーズ(任意)任意の文字列マスター公開鍵(33バイト)公開鍵の導出SHA-512HalfSHA-512, 最初の16バイトを保持 diff --git a/img/key-derivation-secp256k1.ja.svg b/img/key-derivation-secp256k1.ja.svg new file mode 100644 index 0000000000..259c1189a0 --- /dev/null +++ b/img/key-derivation-secp256k1.ja.svg @@ -0,0 +1,434 @@ + + +アカウントはマスターキーペアを利用バリデータはルートキーペアを利用マスター秘密鍵(32バイト)加算・剰余グループオーダーマスター公開鍵(33バイト圧縮)楕円曲線ポイントの追加中間公開鍵(33バイト圧縮)中間秘密鍵(32バイト)SHA-512Halfで有効な秘密鍵が作成されない場合は、キーシーケンスを増やして再試行してください。SHA-512Halfで有効な秘密鍵が作成されない場合は、キーシーケンスを増やして再試行してください。ファミリー番号(4バイト:全て0)整数鍵シーケンス(4バイト:デフォルト0)ルート鍵シーケンス(4バイト:デフォルト0)ルート公開鍵(33バイト圧縮)ルート秘密鍵(32バイト)シード(16バイト)パスフレーズ(任意)任意の文字列(公開鍵の導出は同じ結果となる)公開鍵の導出SHA-512Half公開鍵の導出SHA-512HalfSHA-512, 最初の16バイトを保持 diff --git a/img/quickstart-py-conditional-escrow-1.png b/img/quickstart-py-conditional-escrow-1.png new file mode 100644 index 0000000000..24c9e8485f Binary files /dev/null and b/img/quickstart-py-conditional-escrow-1.png differ diff --git a/img/quickstart-py-conditional-escrow-2.png b/img/quickstart-py-conditional-escrow-2.png new file mode 100644 index 0000000000..5faa94c1e1 Binary files /dev/null and b/img/quickstart-py-conditional-escrow-2.png differ diff --git a/img/quickstart-py-conditional-escrow-3.png b/img/quickstart-py-conditional-escrow-3.png new file mode 100644 index 0000000000..7c2633e2fe Binary files /dev/null and b/img/quickstart-py-conditional-escrow-3.png differ diff --git a/img/quickstart-py-conditional-escrow-4.png b/img/quickstart-py-conditional-escrow-4.png new file mode 100644 index 0000000000..1071951a59 Binary files /dev/null and b/img/quickstart-py-conditional-escrow-4.png differ diff --git a/img/quickstart-py-conditional-escrow-5.png b/img/quickstart-py-conditional-escrow-5.png new file mode 100644 index 0000000000..e42f21b3af Binary files /dev/null and b/img/quickstart-py-conditional-escrow-5.png differ diff --git a/img/quickstart-py-conditional-escrow-6.png b/img/quickstart-py-conditional-escrow-6.png new file mode 100644 index 0000000000..4104c47b2a Binary files /dev/null and b/img/quickstart-py-conditional-escrow-6.png differ diff --git a/img/quickstart-py-conditional-escrow-7.png b/img/quickstart-py-conditional-escrow-7.png new file mode 100644 index 0000000000..d70643f085 Binary files /dev/null and b/img/quickstart-py-conditional-escrow-7.png differ diff --git a/img/quickstart-py-conditional-escrow-8.png b/img/quickstart-py-conditional-escrow-8.png new file mode 100644 index 0000000000..04ab5963c8 Binary files /dev/null and b/img/quickstart-py-conditional-escrow-8.png differ diff --git a/img/quickstart-py-escrow1.png b/img/quickstart-py-escrow1.png new file mode 100644 index 0000000000..7676b14278 Binary files /dev/null and b/img/quickstart-py-escrow1.png differ diff --git a/img/quickstart-py-escrow2.png b/img/quickstart-py-escrow2.png new file mode 100644 index 0000000000..e6e7fa6e3e Binary files /dev/null and b/img/quickstart-py-escrow2.png differ diff --git a/img/quickstart-py-escrow3.png b/img/quickstart-py-escrow3.png new file mode 100644 index 0000000000..8f2043bad6 Binary files /dev/null and b/img/quickstart-py-escrow3.png differ diff --git a/img/quickstart-py-escrow4.png b/img/quickstart-py-escrow4.png new file mode 100644 index 0000000000..6f26e11b6f Binary files /dev/null and b/img/quickstart-py-escrow4.png differ diff --git a/img/quickstart-py-escrow5.png b/img/quickstart-py-escrow5.png new file mode 100644 index 0000000000..a4ad6dd08f Binary files /dev/null and b/img/quickstart-py-escrow5.png differ diff --git a/img/quickstart-py-escrow6.png b/img/quickstart-py-escrow6.png new file mode 100644 index 0000000000..96d1e9dd2c Binary files /dev/null and b/img/quickstart-py-escrow6.png differ diff --git a/img/quickstart-py-escrow7.png b/img/quickstart-py-escrow7.png new file mode 100644 index 0000000000..703fade475 Binary files /dev/null and b/img/quickstart-py-escrow7.png differ diff --git a/img/quickstart-py-escrow8.png b/img/quickstart-py-escrow8.png new file mode 100644 index 0000000000..9b0165abb6 Binary files /dev/null and b/img/quickstart-py-escrow8.png differ diff --git a/img/quickstart-py36.png b/img/quickstart-py36.png index 152af90cd9..2344c253ad 100644 Binary files a/img/quickstart-py36.png and b/img/quickstart-py36.png differ diff --git a/locale/ja/LC_MESSAGES/messages.mo b/locale/ja/LC_MESSAGES/messages.mo index ae1213e228..ecab7b430a 100644 Binary files a/locale/ja/LC_MESSAGES/messages.mo and b/locale/ja/LC_MESSAGES/messages.mo differ diff --git a/locale/ja/LC_MESSAGES/messages.po b/locale/ja/LC_MESSAGES/messages.po index 145cd8748e..ec7e625c8c 100644 --- a/locale/ja/LC_MESSAGES/messages.po +++ b/locale/ja/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: XRPL.org v0.0\n" "Report-Msgid-Bugs-To: docs@ripple.com\n" -"POT-Creation-Date: 2023-09-22 20:20+0000\n" +"POT-Creation-Date: 2023-09-27 01:30+0000\n" "PO-Revision-Date: 2020-05-12 15:25-0700\n" "Last-Translator: FULL NAME \n" "Language: ja\n" @@ -998,7 +998,7 @@ msgid "See Upcoming Events" msgstr "今後のイベントを見る" #: template/page-funding.html.jinja:67 template/page-funding.html.jinja:156 -#: template/page-funding.html.jinja:239 template/page-funding.html.jinja:316 +#: template/page-funding.html.jinja:239 #, fuzzy msgid "Best for" msgstr "こんな方に最適" @@ -1010,7 +1010,6 @@ msgstr "XRP Ledger上のソフトウェア開発者やXRP Ledger上で直接開 #: template/page-funding.html.jinja:75 template/page-funding.html.jinja:104 #: template/page-funding.html.jinja:164 template/page-funding.html.jinja:192 #: template/page-funding.html.jinja:247 template/page-funding.html.jinja:276 -#: template/page-funding.html.jinja:324 template/page-funding.html.jinja:352 msgid "Required" msgstr "必須要件" @@ -1019,7 +1018,7 @@ msgid "Some coding experience" msgstr "コーディング経験" #: template/page-funding.html.jinja:82 template/page-funding.html.jinja:171 -#: template/page-funding.html.jinja:254 template/page-funding.html.jinja:331 +#: template/page-funding.html.jinja:254 msgid "Level" msgstr "レベル" @@ -1030,7 +1029,6 @@ msgstr "XRPLの初級開発者から上級開発者まで" #: template/page-funding.html.jinja:91 template/page-funding.html.jinja:112 #: template/page-funding.html.jinja:179 template/page-funding.html.jinja:200 #: template/page-funding.html.jinja:263 template/page-funding.html.jinja:284 -#: template/page-funding.html.jinja:340 template/page-funding.html.jinja:360 #, fuzzy msgid "Funding Levels" msgstr "資金調達の規模" @@ -1147,43 +1145,6 @@ msgstr "" msgid "$50,000 (grant) + pitch for venture funding" msgstr "$50,000(助成金)+ベンチャー資金へのピッチ" -#: template/page-funding.html.jinja:305 -msgid "XRPL Bounties" -msgstr "" - -#: template/page-funding.html.jinja:306 -msgid "Go Deep" -msgstr "より深く" - -#: template/page-funding.html.jinja:308 -msgid "" -"Bounties are awards for developing software and integrations that enable " -"and improve specific use cases for the XRP Ledger." -msgstr "Bounties は、XRP Ledger の特定のユースケースを可能にし、改善するソフトウェアや統合を開発するための報奨金です。" - -#: template/page-funding.html.jinja:317 -#, fuzzy -msgid "Software developers and teams" -msgstr "ソフトウェア開発者や開発チーム" - -#: template/page-funding.html.jinja:325 -msgid "" -"Coding experience " -"Specialized skills (depending on the bounty)" -msgstr "コーディング経験 専門スキル(報奨金による)" - -#: template/page-funding.html.jinja:332 template/page-funding.html.jinja:353 -msgid "Intermediate to advanced (prior XRPL experience not required)" -msgstr "中級開発者から上級開発者(XRPLの経験は必要ありません)" - -#: template/page-funding.html.jinja:341 template/page-funding.html.jinja:361 -msgid "$500 - $100,000 per milestone" -msgstr "マイルストーンごとに$500~$100,000" - -#: template/page-funding.html.jinja:368 -msgid "Visit XRPL Bounties" -msgstr "XRPL Bountiesを見る" - #: template/page-history.html.jinja:28 msgid "Provide a Better Alternative to Bitcoin" msgstr "Bitcoinに代わる選択肢" @@ -3250,10 +3211,9 @@ msgid "" "project, explore the XRPL now and consider applying for funding on your " "next blockchain project." msgstr "" -"XRP " -"Ledgerのイノベーションは、皆さんのような開発者が共有するコミュニティーの経験を大切にしています。" -"もしあなたが次の大きなブロックチェーン・プロジェクト" -"を始める準備ができているなら、今すぐXRPLを試し、XRPL開発者向け資金提供プログラムへの応募を検討しましょう。" +"XRP Ledgerのイノベーションは、皆さんのような開発者が共有するコミュニティーの経験を大切にしています。もしあなたが次の大きなブロックチェーン・プロジェクトを始める準備ができているなら、今すぐXRPLを試し、XRPL開発者向け資金提供プログラムへの応募を検討しましょう。" #: template/page-xrpl-overview.html.jinja:169 #, fuzzy @@ -5084,3 +5044,34 @@ msgstr "目次" #~ "Ledger上でNFTを作成することを検討しているクリエイターで、技術的な経験がない場合は、Ripple社のCreator " #~ "Fundをチェックしてみてください。" +#~ msgid "XRPL Bounties" +#~ msgstr "" + +#~ msgid "Go Deep" +#~ msgstr "より深く" + +#~ msgid "" +#~ "Bounties are awards for developing " +#~ "software and integrations that enable " +#~ "and improve specific use cases for " +#~ "the XRP Ledger." +#~ msgstr "Bounties は、XRP Ledger の特定のユースケースを可能にし、改善するソフトウェアや統合を開発するための報奨金です。" + +#~ msgid "Software developers and teams" +#~ msgstr "ソフトウェア開発者や開発チーム" + +#~ msgid "" +#~ "Coding experience Specialized skills " +#~ "(depending on the bounty)" +#~ msgstr "コーディング経験 専門スキル(報奨金による)" + +#~ msgid "Intermediate to advanced (prior XRPL experience not required)" +#~ msgstr "中級開発者から上級開発者(XRPLの経験は必要ありません)" + +#~ msgid "$500 - $100,000 per milestone" +#~ msgstr "マイルストーンごとに$500~$100,000" + +#~ msgid "Visit XRPL Bounties" +#~ msgstr "XRPL Bountiesを見る" + diff --git a/locale/messages.pot b/locale/messages.pot index be2b3804c9..6c4883bc9e 100644 --- a/locale/messages.pot +++ b/locale/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-09-22 20:20+0000\n" +"POT-Creation-Date: 2023-09-27 01:30+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -929,7 +929,7 @@ msgid "See Upcoming Events" msgstr "" #: template/page-funding.html.jinja:67 template/page-funding.html.jinja:156 -#: template/page-funding.html.jinja:239 template/page-funding.html.jinja:316 +#: template/page-funding.html.jinja:239 msgid "Best for" msgstr "" @@ -940,7 +940,6 @@ msgstr "" #: template/page-funding.html.jinja:75 template/page-funding.html.jinja:104 #: template/page-funding.html.jinja:164 template/page-funding.html.jinja:192 #: template/page-funding.html.jinja:247 template/page-funding.html.jinja:276 -#: template/page-funding.html.jinja:324 template/page-funding.html.jinja:352 msgid "Required" msgstr "" @@ -949,7 +948,7 @@ msgid "Some coding experience" msgstr "" #: template/page-funding.html.jinja:82 template/page-funding.html.jinja:171 -#: template/page-funding.html.jinja:254 template/page-funding.html.jinja:331 +#: template/page-funding.html.jinja:254 msgid "Level" msgstr "" @@ -960,7 +959,6 @@ msgstr "" #: template/page-funding.html.jinja:91 template/page-funding.html.jinja:112 #: template/page-funding.html.jinja:179 template/page-funding.html.jinja:200 #: template/page-funding.html.jinja:263 template/page-funding.html.jinja:284 -#: template/page-funding.html.jinja:340 template/page-funding.html.jinja:360 msgid "Funding Levels" msgstr "" @@ -1060,42 +1058,6 @@ msgstr "" msgid "$50,000 (grant) + pitch for venture funding" msgstr "" -#: template/page-funding.html.jinja:305 -msgid "XRPL Bounties" -msgstr "" - -#: template/page-funding.html.jinja:306 -msgid "Go Deep" -msgstr "" - -#: template/page-funding.html.jinja:308 -msgid "" -"Bounties are awards for developing software and integrations that enable " -"and improve specific use cases for the XRP Ledger." -msgstr "" - -#: template/page-funding.html.jinja:317 -msgid "Software developers and teams" -msgstr "" - -#: template/page-funding.html.jinja:325 -msgid "" -"Coding experience " -"Specialized skills (depending on the bounty)" -msgstr "" - -#: template/page-funding.html.jinja:332 template/page-funding.html.jinja:353 -msgid "Intermediate to advanced (prior XRPL experience not required)" -msgstr "" - -#: template/page-funding.html.jinja:341 template/page-funding.html.jinja:361 -msgid "$500 - $100,000 per milestone" -msgstr "" - -#: template/page-funding.html.jinja:368 -msgid "Visit XRPL Bounties" -msgstr "" - #: template/page-history.html.jinja:28 msgid "Provide a Better Alternative to Bitcoin" msgstr "" diff --git a/styles/_landings.scss b/styles/_landings.scss index e10f4305d4..6c4f516d81 100644 --- a/styles/_landings.scss +++ b/styles/_landings.scss @@ -116,6 +116,8 @@ #main_content_wrapper { border-bottom: none; + // Offset for top nav bar + margin-top: 80px; } .marketing-wrapper { diff --git a/styles/_layout.scss b/styles/_layout.scss index 666467502f..635e70b53b 100644 --- a/styles/_layout.scss +++ b/styles/_layout.scss @@ -117,6 +117,17 @@ section { min-width: 100%; } + &.card-grid-4xN { + /* 4 equal columns and any number of auto-sized rows. */ + grid-auto-rows: auto; + grid-template-columns: repeat(2, 1fr); + + @include media-breakpoint-up(lg) { + grid-template-columns: repeat(4, 1fr); + } + } + + &.card-grid-3xN { /* 3 equal columns and any number of auto-sized rows. */ grid-auto-rows: auto; diff --git a/styles/_pages.scss b/styles/_pages.scss index b0f2cd6f1d..2bc54415f8 100644 --- a/styles/_pages.scss +++ b/styles/_pages.scss @@ -31,7 +31,9 @@ } #benefits-list { - @each $benefit in "public", "streamlined", "performance", "low-cost", "community", "reliability" { + @each $benefit in "public", "streamlined", "performance", "low-cost", + "community", "reliability" + { ##{$benefit} { content: url("../img/icons/#{$benefit}.svg"); } @@ -39,7 +41,8 @@ } #advanced-features { - $feature-cards: ["pink-purple", "neutral-blue", "light-green", "orange", "purple-blue-2"]; + $feature-cards: [ "pink-purple", "neutral-blue", "light-green", "orange", + "purple-blue-2"]; @for $i from 1 through 5 { .card:nth-child(#{$i}) .card-footer { background-image: url("../img/cards/3col-#{nth($feature-cards, $i)}.svg"); @@ -48,7 +51,8 @@ } #get-started { - $gs-cards: ["orange-yellow", "magenta-orange", "purple-blue-green", "light-blue", "green-blue"]; + $gs-cards: [ "orange-yellow", "magenta-orange", "purple-blue-green", + "light-blue", "green-blue"]; @for $i from 1 through 5 { .card:nth-child(#{$i}) .card-footer { background-image: url("../img/cards/3col-#{nth($gs-cards, $i)}.svg"); @@ -57,7 +61,6 @@ } } - .cta { position: absolute; &-top-left { @@ -74,7 +77,7 @@ .landing-bg { opacity: 0.6; @include media-breakpoint-up(md) { - opacity: 1.0; + opacity: 1; } } @@ -92,7 +95,7 @@ background-position-y: top; opacity: 0.6; @include media-breakpoint-up(md) { - opacity: 1.0; + opacity: 1; } } } @@ -123,7 +126,9 @@ #top-exchanges { // Vector logos - @each $exchange in "bitstamp", "kraken", "cex-io", "liquid", "lmax", "bitfinex", "etoro" { + @each $exchange in "bitstamp", "kraken", "cex-io", "liquid", "lmax", + "bitfinex", "etoro" + { #exch-#{$exchange} { content: url("../img/exchanges/#{$exchange}.svg"); } @@ -164,7 +169,6 @@ } .page-uses { - .container-new { padding-left: 16px; padding-right: 16px; @@ -180,7 +184,7 @@ } .card-grid { - grid-gap: 8px + grid-gap: 8px; } .card-grid img { @@ -189,7 +193,7 @@ /* Cleanup bootstrap modal */ .modal { - padding: 0; + padding: 0; } .modal-content { position: relative; @@ -199,7 +203,7 @@ pointer-events: auto; background-color: $black; - background-clip: padding-box; + background-clip: padding-box; border: none; border-radius: 0; box-shadow: none; @@ -224,12 +228,12 @@ border: none; background: $gray-900; box-shadow: 0px -1px 2px $black; - - align-items: unset; + + align-items: unset; padding: 0.75rem; flex-direction: column; flex-wrap: wrap; - } + } .card-title { margin-bottom: 0.5rem; @@ -266,7 +270,11 @@ /*color: $gray-300;*/ color: $gray-300; } - + .light { + .category-checkbox label { + color: #ffffff; + } + } .category-checkbox { display: flex; align-items: center; @@ -278,7 +286,8 @@ padding-left: 26px; } .category_count { - padding: 0px 8px; + margin-left: 8px; + padding: 2px 16px; width: 24px; height: 16px; background: $blue-purple-800; @@ -294,77 +303,70 @@ top: 10px; } - - @each $usecase in "infrastructure", - "developer_tooling", - "interoperability", - "wallet", - "nfts", - "exchanges", - "gaming", - "security", - "payments", - "web_monetization", - "sustainability", - "cbdc", - "custody", - "defi" { + @each $usecase in "infrastructure", "developer_tooling", "interoperability", + "wallet", "nfts", "exchanges", "gaming", "security", "payments", + "web_monetization", "sustainability", "cbdc", "other", "carbon_markets", + "custody", "defi" + { ##{$usecase} { content: url("../img/icons/usecases/ic_#{$usecase}.png"); } } -// logos for cards -// $type incase png or jpg is needed. - @each $company,$type in ( - "bithomp": 'svg', - "onthedex": "svg", - "gatehub": "svg", - "towo-labs": "svg", - "xrp-toolkit": "svg", - "xrpl-org-ledger-explorer": "svg", - "xrpl-rosetta": "svg", - "xrpscan": "svg", - "evernode": "svg", - "cryptum": "svg", - "x-tokenize": "svg", - "multichain": "svg", - "xumm-wallet": "svg", - "gem-wallet": "svg", - "aesthetes": "svg", - "audiotarky": "svg", - "xrp-cafe": "svg", - "nft-master": "svg", - "onxrp": "svg", - "peerkat": "svg", - "sologenic-nft": "svg", - "sologenic-dex": "svg", - "xp-market": "svg", - "ledger-city": "svg", - "forte": "svg", - "anchain-ai": "svg", - "coil": "svg", - "carbonland-trust": "svg", - "casino-coin": "svg", - "bitgo": "svg", - "bitpay": "svg", - "ripples-on-demand-liquidity": "svg", - "ripples-cbdc-platform": "svg", - ) { + // logos for cards + // $type incase png or jpg is needed. + @each $company, + $type + in ( + "bithomp": "svg", + "onthedex": "svg", + "gatehub": "svg", + "towo-labs": "svg", + "xrp-toolkit": "svg", + "xrpl-org-ledger-explorer": "svg", + "xrpl-rosetta": "svg", + "xrpscan": "svg", + "evernode": "svg", + "cryptum": "svg", + "x-tokenize": "svg", + "multichain": "svg", + "xumm-wallet": "svg", + "gem-wallet": "svg", + "aesthetes": "svg", + "audiotarky": "svg", + "xrp-cafe": "svg", + "nft-master": "svg", + "onxrp": "svg", + "peerkat": "svg", + "sologenic-nft": "svg", + "sologenic-dex": "svg", + "xp-market": "svg", + "ledger-city": "svg", + "forte": "svg", + "anchain-ai": "svg", + "coil": "svg", + "carbonland-trust": "svg", + "casino-coin": "svg", + "bitgo": "svg", + "bitpay": "svg", + "ripples-on-demand-liquidity": "svg", + "ripples-cbdc-platform": "svg", + "momento": "svg", + "Crossmark": "png", + "Edge": "png" + ) + { #use_case_companies_list { ##{$company} { .biz-logo { max-height: 40px; content: url("../img/uses/#{$company}.#{$type}"); } - } + } } - } - @include media-breakpoint-up(lg) { - h1 { font-size: 62px; } @@ -372,24 +374,21 @@ padding-left: 64px; padding-right: 64px; } - + .card-grid img { max-height: 48px; } - + .card-grid { - grid-gap: 48px + grid-gap: 48px; } - + .card-uses { padding: 24px; } } - - - } -// End UseCases +// End UseCases // History Page #history-orange { @@ -444,7 +443,6 @@ } .page-impact { - #map-light { display: none; } @@ -462,7 +460,6 @@ } .page-funding { - .funding-list { @each $funding in "funding-01", "funding-02", "funding-03", "funding-04" { ##{$funding} { @@ -477,9 +474,9 @@ left: -4px; } -// even out height on large + // even out height on large @media (min-width: 992px) { - .funding-box{ + .funding-box { min-height: 200px; } } @@ -487,69 +484,72 @@ // Ambassadors .page-ambassadors { - - #benefits-list { - @each $benefits in "benefits-01", "benefits-02", "benefits-03", "benefits-04", "benefits-05", "benefits-06" { - ##{$benefits} { - content: url("../img/ambassadors/#{$benefits}.svg"); - } + #benefits-list { + @each $benefits in "benefits-01", "benefits-02", "benefits-03", + "benefits-04", "benefits-05", "benefits-06" + { + ##{$benefits} { + content: url("../img/ambassadors/#{$benefits}.svg"); } } - - #eligibility-list { - @each $eligibility in "eligibility-01", "eligibility-02", "eligibility-03", "eligibility-04", "eligibility-05" { - ##{$eligibility} { - content: url("../img/ambassadors/#{$eligibility}.svg"); - } + } + + #eligibility-list { + @each $eligibility in "eligibility-01", "eligibility-02", "eligibility-03", + "eligibility-04", "eligibility-05" + { + ##{$eligibility} { + content: url("../img/ambassadors/#{$eligibility}.svg"); } } + } -// Button has link out arrow. + // Button has link out arrow. .btn { - padding: .75rem; + padding: 0.75rem; } #container-scroll { - height:160px; - position:relative; - overflow:hidden; + height: 160px; + position: relative; + overflow: hidden; margin-top: 80px; margin-bottom: 64px; } - + .photobanner { - position:absolute; - top:0px; - left:0px; - overflow:hidden; + position: absolute; + top: 0px; + left: 0px; + overflow: hidden; white-space: nowrap; animation: bannermove 40s linear infinite; } .photobanner-bottom { - top:112px; + top: 112px; } - - .photobanner img { - margin: 0 0.5em + + .photobanner img { + margin: 0 0.5em; } - + @keyframes bannermove { 0% { - transform: translate(0, 0); + transform: translate(0, 0); } 100% { - transform: translate(-50%, 0); + transform: translate(-50%, 0); } } -// Sliding Quotes - #carouselSlidesOnly{ + // Sliding Quotes + #carouselSlidesOnly { height: 392px; margin-bottom: 40px; } @media (min-width: 992px) { - #carouselSlidesOnly{ + #carouselSlidesOnly { height: 320px; margin-bottom: 104px; } @@ -558,7 +558,7 @@ h6 { font-size: 1.25rem; } -// Arrow links after text + // Arrow links after text .btn-arrow::after { display: inline-block; content: url(../img/icons/arrow-right-purple.svg); @@ -577,7 +577,6 @@ background-position: left 4px bottom 4px; transform: translateX(4px); } - } // Community Page @@ -595,12 +594,12 @@ // Events page .page-events { #event-hero-image { - height: 100%; - min-height: 209px; - background: url(../img/events/event-hero1@2x.png); - background-size: contain; - background-repeat: no-repeat; - background-position: center; + height: 100%; + min-height: 209px; + background: url(../img/events/event-hero1@2x.png); + background-size: contain; + background-repeat: no-repeat; + background-position: center; } #events-orange { position: absolute; @@ -609,113 +608,112 @@ } .event-hero { - color: $gray-100; - p { - font-weight: 500; - font-size: 24px; - line-height: 32px; - } + color: $gray-100; + p { + font-weight: 500; + font-size: 24px; + line-height: 32px; + } } .event-save-date { - color: $white; - font-weight: bold; - font-size: 20px; - line-height: 26px; + color: $white; + font-weight: bold; + font-size: 20px; + line-height: 26px; } .event-small-gray { - color: $gray-200; + color: $gray-200; } // Button has link out arrow. .btn { - padding: .75rem; + padding: 0.75rem; } .event-card { - max-width: 311px; - margin: 32px auto; - transition: all 0.35s ease-out; + max-width: 311px; + margin: 32px auto; + transition: all 0.35s ease-out; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-clip: border-box; + + background-color: $card-bg; + box-shadow: 0px 5px 40px $black; + + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 8px; + + font-size: 16px; + line-height: 24px; + color: $gray-200; + + .event-card-header { position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-clip: border-box; + height: 176px; + background-size: contain !important; + width: 100%; + border-radius: 8px 8px 0 0; + } - background-color: $card-bg; - box-shadow: 0px 5px 40px $black; + .event-card-title { + position: absolute; + bottom: 32px; + padding: 0 32px; + color: $gray-100; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 8px; + font-weight: bold; + font-size: 20px; + line-height: 28px; + } - font-size: 16px; - line-height: 24px; - color: $gray-200; + .event-card-body { + padding: 32px; + } - .event-card-header { - position: relative; - height: 176px; - background-size: contain !important; - width: 100%; - border-radius: 8px 8px 0 0; - } + .event-card-footer { + padding: 0 32px 32px; + } - .event-card-title { - position: absolute; - bottom: 32px; - padding: 0 32px; - color: $gray-100; + .event-card-footer .icon::before { + height: 24px; + width: 24px; + content: ""; + margin-right: 8px; + background-size: contain; + background-repeat: no-repeat; + } - font-weight: bold; - font-size: 20px; - line-height: 28px; - } - - .event-card-body { - padding: 32px; - } - - .event-card-footer { - padding: 0 32px 32px; - } - - .event-card-footer .icon::before { - height: 24px; - width: 24px; - content: ""; - margin-right: 8px; - background-size: contain; - background-repeat: no-repeat; - } - - .icon-date::before { - background: url(../img/events/event-date.svg); - } - .icon-location::before { - background: url(../img/events/event-location.svg); - } + .icon-date::before { + background: url(../img/events/event-date.svg); + } + .icon-location::before { + background: url(../img/events/event-location.svg); + } } //end event card @media (min-width: 992px) { - .event-card { - max-width: 347px; - margin: 32px; - } - .event-card-header { - height: 197px !important; - } + .event-card { + max-width: 347px; + margin: 32px; + } + .event-card-header { + height: 197px !important; + } } a.event-card:hover { - transform: translateY(-16px); - text-decoration: none; + transform: translateY(-16px); + text-decoration: none; } - label { margin: 0; padding-left: 8px; - color: $white; + color: $white; } .events-filter h6 { @@ -731,13 +729,12 @@ // -webkit-filter: opacity(0.4); // } - .events-filter[type="checkbox"]::before { position: relative; display: block; width: 20px; height: 20px; - + content: ""; background: $gray-900; @@ -746,17 +743,17 @@ border-style: solid; border-color: $gray-400; } - + .events-filter[type="checkbox"]::after { position: relative; display: block; - + top: -20px; width: 20px; height: 20px; - + content: ""; - + background-repeat: no-repeat; background-position: center; border-radius: 4px; @@ -764,7 +761,7 @@ border-style: solid; border-color: $gray-400; } - + .events-filter[type="checkbox"]:checked::before { background: $gray-900; border: none; @@ -781,7 +778,6 @@ border-color: $blue-purple-500; border-radius: 4px; } - .events-filter[type="checkbox"]:not(:disabled):checked:hover::after { background-image: url(../img/events/event-check.svg); @@ -792,7 +788,6 @@ border-color: $blue-purple-600; border-radius: 4px; } - .events-filter[type="checkbox"]:not(:disabled):hover::before { background: $gray-900; @@ -808,13 +803,8 @@ border-color: $blue-purple-600; border-radius: 4px; } - } - - - - #find-us-on-platforms .card-deck { .card:nth-child(1) .card-footer { background-image: url(../img/cards/4col-light-blue-3.svg); @@ -841,14 +831,11 @@ background-image: url(../img/cards/4col-orange-2.svg); } - .card { margin-bottom: 2.5rem; } - } - .page-faq { &::before { background-image: url(../img/backgrounds/faq-bg.svg); @@ -967,7 +954,6 @@ right: 2rem; } } - } } @@ -980,12 +966,12 @@ .center-search { .input-group-text { height: 56px; - padding: .75rem .75rem .75rem 1rem; + padding: 0.75rem 0.75rem 0.75rem 1rem; line-height: 2rem; } .ds-input { height: 56px; - padding: .75rem 1rem .75rem .5rem; + padding: 0.75rem 1rem 0.75rem 0.5rem; } } @@ -1026,7 +1012,6 @@ .page-docs-index, .page-community { - #community-heading { padding-top: 2.5rem; padding-bottom: 5rem; @@ -1048,7 +1033,7 @@ -o-transition: all 0.1s ease; transition: all 0.1s ease; } - + .one { top: 160px; left: 0%; @@ -1069,9 +1054,6 @@ top: 120px; right: 0%; } - - - } #run-a-network-node .card-deck { @@ -1097,7 +1079,6 @@ padding-bottom: 104px; } - .text-cards { grid-gap: 40px; @@ -1112,7 +1093,7 @@ color: #fff; font-weight: bold; - &:hover { + &:hover { text-decoration: none; background: none !important; } @@ -1171,13 +1152,14 @@ padding-bottom: 208px; } } - } .page-community { - @each $platform in "github", "twitch", "stack-overflow", "twitter", "discord", "youtube", "devto" { + @each $platform in "github", "twitch", "stack-overflow", "twitter", "discord", + "youtube", "devto" + { #platform-#{$platform} { - content: url("../img/logos/#{$platform}.svg") + content: url("../img/logos/#{$platform}.svg"); } } } @@ -1210,7 +1192,6 @@ } } - .page-dev-tools { @each $tool, $card-graphic @@ -1289,7 +1270,7 @@ html.light { .nav-link { color: $black; } - #trasaction-sender .card-footer{ + #trasaction-sender .card-footer { background-image: url("../img/cards/3-col-light-blue-2.svg"); } } diff --git a/styles/_use-cases.scss b/styles/_use-cases.scss index aebee1fea6..9b7c293bd0 100644 --- a/styles/_use-cases.scss +++ b/styles/_use-cases.scss @@ -1,11 +1,94 @@ /* Use Cases ---------------------------------------------------------------- */ + +// Define each category's logos +$infrastructure-logos: "xrp-ledger", "gatehub", "towolabs", "xrpscan", "xrp-toolkit", "bithomp", "onthedex"; +$developer-tooling-logos: "cryptum", "evernode", "threezy", "tokenize"; +$interoperability-logos: "multichain"; +$wallet-logos: "crossmark", "edge", "gem-wallet", "xumm"; +$nfts-logos: "aesthetes", "audiotarky", "nftmaster", "peerkat", "sologenic_dex", "xrp-cafe", "xrp-oval"; +$exchanges-logos: "sologenic_dex", "xpmarket"; +$gaming-logos: "forte", "ledger-city"; +$security-logos: "anchain"; +$payments-logos: "ripple", "supermojo"; +$cbdc-logos: "ripple"; +$carbon-markets-logos: "carbonland-trust"; +$custody-logos: "gatehub", "bitgo"; + +// Create a mixin to handle the common logic +@mixin create-logo-classes($logo-list) { + @each $logo in $logo-list { + .#{$logo} { + content: url(../img/uses/modallogos/#{$logo}.png); + } + + html.light { + .#{$logo} { + content: url(../img/uses/lightmode/#{$logo}.png); + } + } + } +} +#use_case_companies_list { + #threezy { + .biz-logo { + max-height: 40px; + content: url("../img/uses/modallogos/threezy.png"); + } + } +} +html.light{ + .cryptum{ + content: url(../img/uses/lightmode/cryptum.jpg) !important; + height: 58px; + max-width: max-content; + width: 184px; + max-height: none; + margin: 0px; + padding-bottom: 10px; + } +} +// Use the mixin for each category +@include create-logo-classes($infrastructure-logos); +@include create-logo-classes($developer-tooling-logos); +@include create-logo-classes($interoperability-logos); +@include create-logo-classes($wallet-logos); +@include create-logo-classes($nfts-logos); +@include create-logo-classes($exchanges-logos); +@include create-logo-classes($gaming-logos); +@include create-logo-classes($security-logos); +@include create-logo-classes($payments-logos); +@include create-logo-classes($cbdc-logos); +@include create-logo-classes($carbon-markets-logos); +@include create-logo-classes($custody-logos); + +.arrow-button.left-arrow img { + content: url(../img/uses/left-arrow.svg); +} + +.arrow-button.right-arrow img { + content: url(../img/uses/right-arrow.svg); +} + + +.html.light { + .arrow-button.left-arrow img { + content: url(../img/uses/left-arrow-light.svg); + } + + .arrow-button.right-arrow img { + content: url(../img/uses/right-arrow-light.svg); + } +} + .related-tasks-links a { color: $gray-600; text-decoration: none; } + .related-tasks-links a:hover { color: $black; } + .use-case-external-link { border: 1px solid $gray-300; } @@ -21,7 +104,7 @@ color: #eae7e6; font-size: 5.16em; font-weight: 400; - font-family: 'Space Mono', sans-serif; + font-family: "Space Mono", sans-serif; } .use-case-step-length { @@ -30,6 +113,411 @@ font-size: 1rem; } +.arrows-container { + position: absolute; + top: 50%; + left: 0; + right: 0; + transform: translateY(-50%); + display: flex; + justify-content: space-between; + z-index: 10; + @media only screen and (max-width: 768px) { + top: 30px; + } +} + +.arrow-button { + background-color: transparent; + border: none; + cursor: pointer; +} + +.arrow-button img { + width: 40px; + height: 40px; +} + +.left-arrow { + margin-left: 40px; + @media only screen and (max-width: 768px) { + margin-left: 0px; + } +} + +.right-arrow { + margin-right: 40px; + @media only screen and (max-width: 768px) { + margin-right: 0px; + } +} + +.modal-uses { + display: none; + position: fixed; + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgba(0, 0, 0, 0.4); +} + +.modal-content-uses { + position: relative; + /* Add position: relative to modal-content-uses */ + background-color: #232325; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + padding: 20px; + width: 60% !important; + height: 60%; + display: flex; + flex-direction: column; + align-items: center; + overflow: scroll; +} + +.modal-content-uses::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 1px; + background: linear-gradient(90deg, + #b480ff -0.32%, + #5f00e6 32.7%, + #1aa4ff 61.53%, + #19ff83 100.32%, + #19ff83 100.32%); +} + +.content-section { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 20px; +} + +.section-image { + display: block; +} + +.section-text-title { + font-family: "Work Sans"; + font-style: normal; + font-weight: 500; + font-size: 24px; + line-height: 32px; + text-align: center; + color: #ffffff; +} + +.section-text-description { + max-width: 320px; + font-family: "Work Sans"; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 24px; + text-align: center; + color: #c1c1c2; +} + +.apps-built { + position: relative; + top: 17px; + left: 50px; + font-family: "Work Sans"; + font-style: normal; + font-weight: 600; + font-size: 12px; + line-height: 16px; + color: #e0e0e1; +} + +.numbers-animation { + width: 218px; + height: 96px; +} + +.arrow-animation { + position: relative; + right: 23px; + top: -11px; + width: 60px !important; +} + +.explore-projects { + font-family: "Work Sans"; + font-style: normal; + font-weight: 600; + font-size: 12px; + line-height: 16px; + color: #7919ff; + position: relative; + top: -9px; + right: 27px; +} + +.section-separator { + width: 50%; + border: 0; + border-top: 1px solid #ccc; +} + +.threezy-logo { + margin: 4px; + max-height: 38px; +} + +.blockforce-logo { + margin: 0px !important; + max-height: 45px !important; +} + +.Evernode-logo { + margin-right: 39px; +} + +.logo-grid { + display: grid; + grid-template-rows: repeat(2, 1fr); + grid-template-columns: repeat(4, 1fr); + grid-gap: 8px; + justify-items: center; +} + +.flex-center { + display: flex; + justify-content: center; +} + +.top-row, +.bottom-row { + display: flex; + justify-content: center; + @media only screen and (max-width: 768px) { + flex-wrap: wrap; + } +} + +.logo-item { + max-height: 30px; + max-width: 130px; + margin: 10px 11px; +} + + +.close { + color: #aaaaaa; + float: right; + font-size: 28px; + font-weight: bold; + cursor: pointer; +} + +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; +} + +.use-case-circle { + display: flex; + align-items: center; + justify-content: center; + aspect-ratio: 1 / 1; // Maintain aspect ratio + border: 1px solid #343437; + border-radius: 50%; + margin-bottom: 30px; + cursor: pointer; + + // Media query for medium screens + @include media-breakpoint-up(md) { + aspect-ratio: 1 / 1; // Maintain aspect ratio + min-width: 200px !important; // Set a minimum width + min-height: 200px !important; // Set a minimum height + } + + // Media query for large screens + @include media-breakpoint-up(lg) { + aspect-ratio: 1 / 1; // Maintain aspect ratio + min-width: 250px !important; // Set a minimum width + min-height: 250px !important; // Set a minimum height + } +} + +.use-case-circle:hover { + border-color: #838386; + +} + +.circle-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 13px; + /* Adjust the space between the elements */ +} + +.circle-img { + width: 40px; + height: 40px; +} + +.circle-text { + font-family: "Work Sans"; + font-style: normal; + font-weight: 700; + white-space: nowrap; + font-size: 16px; + margin-bottom: 0px; +} + +.join-xrpl-section { + display: flex; + flex-direction: column; + align-items: center; +} + +.colorful-join-text-wrapper { + display: flex; + justify-content: center; + flex-direction: column; + padding: 0 5%; + /* Percentage-based padding to make it responsive */ + box-sizing: border-box; +} + +@include media-breakpoint-up(lg) { + .colorful-join-text-wrapper { + padding: 0 4%; + /* Percentage-based padding to make it responsive */ + } +} + +.colorful-join-text { + display: block; + width: 100%; + text-align: left; + font-family: "Work Sans"; + font-style: normal; + font-weight: 400; + font-size: 32px; + line-height: 38px; + background: linear-gradient(90deg, + #feff01 0%, + #ff2d9a 30.82%, + #e24cff 64.01%, + #9a52ff 100%); + + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +#numbersAnimation { + display: block; +} + +#numbersAnimationLight { + display: none; +} + +html.light { + .section-separator { + background: #C1C1C2; + } + + .section-text-description { + color: #343437; + } + + .modal-content-uses { + background: #ffffff; + } + + #numbersAnimation { + display: none; + } + + #numbersAnimationLight { + display: block; + } + + .apps-built { + position: relative; + top: 17px; + left: 50px; + font-family: "Work Sans"; + font-style: normal; + font-weight: 600; + font-size: 12px; + line-height: 16px; + color: #232325; + } + + .colorful-join-text { + display: block; + width: 100%; + text-align: left; + font-family: "Work Sans"; + font-style: normal; + font-weight: 400; + font-size: 32px; + line-height: 38px; + background: linear-gradient(90deg, + #b480ff -0.32%, + #5f00e6 32.7%, + #1aa4ff 61.53%, + #19ff83 100.32%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + @include media-breakpoint-up(lg) { + .colorful-join-text { + width: 750px; + } + } +} + +@include media-breakpoint-up(lg) { + .colorful-join-text { + width: 750px; + } +} + +.pill-box { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3.69087px 29.527px; + width: 73.05px; + height: 37.38px; + /* Blue-Purple/Blue-Purple 50 */ + background: #7919ff; + /* Blue-Purple/Blue-Purple 60 */ + border: 3.69087px solid #5f00e5; + border-radius: 184.543px; +} + +.pill-number { + font-family: "Work Sans"; + font-style: normal; + font-weight: 600; + font-size: 22.1452px; + color: #f0e5ff; +} + .use-case-steps h2 { margin-top: 10px; margin-bottom: 10px; @@ -37,6 +525,7 @@ line-height: 32px; font-weight: 700; } + .use-case-steps h2 a { text-decoration: none; } @@ -49,10 +538,12 @@ font-size: 2.4em; padding-bottom: 10px; } + .use-case-steps h2:before { margin-top: -30px; height: 0; } + .use-case-steps h2:first-of-type { margin-top: -30px; } @@ -61,15 +552,18 @@ list-style-type: none; padding-left: 0; } + .related-tasks-links ul li { margin: 0px; padding-top: 2px; } + .related-tasks-links a:hover::after { - padding-left: .5em; + padding-left: 0.5em; } + .related-tasks-links a::after { content: " ➝"; padding-left: 0; - transition: all .2s ease-in-out; -} + transition: all 0.2s ease-in-out; +} \ No newline at end of file diff --git a/styles/_xrplai.scss b/styles/_xrplai.scss new file mode 100644 index 0000000000..a5582d6d96 --- /dev/null +++ b/styles/_xrplai.scss @@ -0,0 +1,20 @@ +button.MarkpromptFloatingTrigger { + bottom: 4.5rem; +} + +html.light .MarkpromptContentDialog a { + color: $light-link-hover-color; +} + +html.light .MarkpromptContentDialog h3:not(.chip) { + color: $black; +} + +.MarkpromptExtendedFeedbackTextInput { + background-color: $white; + color: $black; +} + +.MarkpromptOverlay { + z-index: 20; +} \ No newline at end of file diff --git a/styles/light/_light-theme.scss b/styles/light/_light-theme.scss index baff4e0da5..eacf6107a8 100644 --- a/styles/light/_light-theme.scss +++ b/styles/light/_light-theme.scss @@ -699,6 +699,8 @@ pre code { "sustainability", "cbdc", "custody", + "other", + "carbon_markets", "defi" { ##{$usecase} { content: url("../img/icons/usecases/lightmode/ic_#{$usecase}.png"); @@ -713,7 +715,9 @@ pre code { background: #D2B2FF; color: #350080; } - + .section-text-title { + color: #000; + } @each $company,$type in ( 'bitgo': 'svg', 'sologenic-nft': 'svg', @@ -731,8 +735,9 @@ pre code { 'xrpscan': 'svg', 'ripples-on-demand-liquidity': 'svg', 'xumm-wallet': 'svg', - 'sologenic-dex': 'svg' - ) + 'sologenic-dex': 'svg', + 'Crossmark': 'png' + ) { #use_case_companies_list { ##{$company} { @@ -743,6 +748,16 @@ pre code { } } } + #use_case_companies_list { + #threezy { + .biz-logo { + max-height: 40px; + content: url("../img/uses/lightmode/threezy.png"); + } + } + } + + // Monochrome logos; invert. #bitpay, diff --git a/styles/xrpl.scss b/styles/xrpl.scss index db979c5b98..f4404074e2 100644 --- a/styles/xrpl.scss +++ b/styles/xrpl.scss @@ -71,6 +71,7 @@ $line-height-base: 1.5; @import "_toml-checker.scss"; @import "_tutorials.scss"; @import "_docs-landing.scss"; +@import "_xrplai.scss"; // Light/Dark theme settings --------------------------------------------------- // Option to only change theme on user system settings. No toggle. diff --git a/template/base.html.jinja b/template/base.html.jinja index 2b1b1934c8..327d074077 100644 --- a/template/base.html.jinja +++ b/template/base.html.jinja @@ -8,8 +8,8 @@ - - + + @@ -57,6 +57,7 @@ + {% if "js_editor" in currentpage.filters %} @@ -147,6 +148,95 @@ $(document).ready(() => { }) + + + {% if currentpage.embed_xrpl_js %} {{currentpage.ripple_lib_tag}} diff --git a/template/page-ambassadors.html.jinja b/template/page-ambassadors.html.jinja index c8d30c3ee0..f3556540cc 100644 --- a/template/page-ambassadors.html.jinja +++ b/template/page-ambassadors.html.jinja @@ -28,9 +28,9 @@
{% trans %}Join the Student Cohort{% endtrans %}

{% trans %}The XRPL Campus Ambassador program engages, supports, connects, and recognizes a group of student champions of the XRPL and empowers them to further advance engagement on the ledger.{% endtrans %}

- + data-tf-hidden="utm_source=xxxxx,utm_medium=xxxxx,utm_campaign=xxxxx,utm_term=xxxxx,utm_content=xxxxx">Apply for Spring 2024 @@ -47,9 +47,9 @@

{% trans %}The XRPL Campus Ambassador program aims to elevate the impact of college students who are passionate about blockchain technology. In their role, Campus Ambassadors help educate other students about crypto and how to start building on the XRPL.{% endtrans %}

- + data-tf-hidden="utm_source=xxxxx,utm_medium=xxxxx,utm_campaign=xxxxx,utm_term=xxxxx,utm_content=xxxxx">Apply for Spring 2024
@@ -60,9 +60,9 @@
- + data-tf-hidden="utm_source=xxxxx,utm_medium=xxxxx,utm_campaign=xxxxx,utm_term=xxxxx,utm_content=xxxxx">Apply for Spring 2024
@@ -335,9 +335,9 @@

{% trans %}Apply now to become an XRPL Campus Ambassador.{% endtrans %}

- + data-tf-hidden="utm_source=xxxxx,utm_medium=xxxxx,utm_campaign=xxxxx,utm_term=xxxxx,utm_content=xxxxx">Apply for Spring 2024
@@ -409,9 +409,9 @@
- + data-tf-hidden="utm_source=xxxxx,utm_medium=xxxxx,utm_campaign=xxxxx,utm_term=xxxxx,utm_content=xxxxx">{% trans %}Apply for Spring 2024{% endtrans %}
@@ -462,7 +462,7 @@

{% trans %}To stay up-to-date on the latest activity, meetups, and events of the XRPL Campus Ambassadors be sure to follow these channels:{% endtrans %}

- +
@@ -505,7 +505,7 @@
- +
diff --git a/template/page-community.html.jinja b/template/page-community.html.jinja index 10cca9fc8f..0490ff09ef 100644 --- a/template/page-community.html.jinja +++ b/template/page-community.html.jinja @@ -276,7 +276,7 @@
- {% trans %}Download the PDF and Assets{% endtrans %} + {% trans %}Download the PDF and Assets{% endtrans %}
diff --git a/template/page-events.html.jinja b/template/page-events.html.jinja index a371249ca2..e5a8c5f889 100644 --- a/template/page-events.html.jinja +++ b/template/page-events.html.jinja @@ -29,7 +29,7 @@ -{# +
@@ -49,17 +49,16 @@
- Date: September 6-8, 2023 + Date: June 11-13, 2024
-#} {# Upcoming Events #}
@@ -101,373 +100,22 @@ -{% set events = [ -{ "name": "Hackathon: 2021", - "description": "Explore the exciting project submissions from the fall 2021 XRPL Hackathon that focused on the NFT and Hooks smart contract functionalities on the ledger.", - "type": "hackathon", - "link": "https://xrpl-hackathon-2021.devpost.com/project-gallery", - "location": "Virtual", - "date": "September 13-October 6, 2021", - "image": "Hackathons.png", - "end_date": "October 6, 2021", - }, - - { "name": "XRPL Community Meetup: San Diego", - "description": "The first official Meetup hosted by the XRPL Community. Community members in Southern California gathered around a firepit and shared their experiences with the XRPL.", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-community/events/281806645/", - "location": "San Diego, CA", - "date": "Saturday, November 20, 2021", - "image": "event-meetup-san-diego@2x.jpg", - "end_date": "November 20, 2021", - }, - - { "name": "XRPL Community Meetup: Atlanta", - "description": "The inaugural Meetup in the Southeast region of the United States got community members excited to meet like-minded individuals in their area.", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-community/events/281980446/", - "location": "Atlanta, GA", - "date": "Saturday, November 27, 2021", - "image": "event-meetup-alanta@2x.jpg", - "end_date": "November 27, 2021", -}, - - { "name": "XRPL Community Meetup: San Francisco", - "description": "Community members in the Bay Area with diverse backgrounds in technology and beyond met in downtown San Francisco.", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-community/events/281806676/", - "location": "San Francisco, CA", - "date": "Monday, November 29, 2021", - "image": "event-meetup-san-francisco@2x.jpg", - "end_date": "November 29, 2021", - }, - - { "name": "XRPL Community Meetup: Miami", - "description": "One of the biggest Meetups held so far, this was the first of an ongoing series of local XRPL Community Meetup events in Miami. ", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-community/events/281829463/", - "location": "Miami, FL ", - "date": "Thursday, December 9, 2021", - "image": "event-meetup-miami@2x.jpg", - "end_date": "December 8, 2022", - }, - - { "name": "XRPL Community Meetup: Nashville", - "description": "Nashville-based members of the XRPL Community came together to network, learn, share ideas, and form new partnerships. ", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-nashville-community/events/282538189/", - "location": "Nashville, TN", - "date": "Saturday, December 18, 2021", - "image": "event-meetup-nashville@2x.jpg", - "end_date": "December 18, 2022", - }, - - - { "name": "NYC Meetup/Hackathon XRPL Celebration", - "id": "upcoming-xrpl-new-york", - "description": "The NYC/XRP community and Dev Null Productions cordially invites you to attend our 10th meetup, being held in celebration of the on-going XRPL Hackathon, at the unique and artistic TALS studio in Midtown Manhattan.", - "type": "meetup", - "link": "https://www.meetup.com/NYC-XRP/events/284485901/", - "location": "NYC, NY", - "date": "March 30, 2022", - "image": "event-meetup-new-york@2x.jpg", - "end_date": "March 30, 2022", - }, - - { "name": "XRPL Community Meetup: London", - "id": "upcoming-xrpl-london", - "description": "Join for an evening of programming and networking with members of the XRPL Community in London, co-organised by Peerkat - the NFT platform for creators on the XRPL.", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-london-community/events/283536458/", - "location": "IDEALondon", - "date": "March 31, 2022", - "image": "event-meetup-london.png", - "end_date": "March 31, 2022", - }, - - { "name": "XRPL Community Meetup: Toronto", - "id": "upcoming-xrpl-toronto", - "description": "Join us for our first Toronto meetup with an evening of programming and networking with other members of the XRP Ledger Community with special guests from the XUMM Wallet and ARK PLATES teams!", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-toronto-community-meetup/events/284177188/", - "location": "Toronto", - "date": "March 31, 2022", - "image": "event-meetup-toronto@2x.jpg", - "end_date": "March 31, 2022", - }, - - { "name": "XRPL Community Meetup: San Diego", - "id": "upcoming-xrpl-san-diego", - "description": "Get together with other San Diego-based members of the XRP Ledger Community to network and discuss all things XRPL! Join us for our second San Diego XRPL Meetup.", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-san-diego-community/events/284663355/", - "location": "San Diego, CA", - "date": "April 1st 2022", - "image": "event-meetup-san-diego@2x.jpg", - "end_date": "April 1, 2022", - }, - - { "name": "XRPL Community Meetup: Irvine LA", - "id": "upcoming-xrpl-irvine", - "description": "Get together with other LA-based members of the XRP Ledger Community to network and discuss all things XRPL.", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-la-community-meetup/events/284824635/", - "location": "UC Irvine, CA", - "date": "April 3rd 2022", - "image": "event-meetup-irvine@2x.jpg", - "end_date": "April 2, 2022", - }, - - { "name": "XRPL Community Meetup: Miami #2", - "id": "upcoming-xrpl-miami-2", - "description": "We're excited to host our second Miami meetup for XRP Ledger community members on April 6th from 6-8pm, featuring Marco Neri, Developer Advocate at Ripple, who will join us to give a presentation on the XRP Ledger.", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-miami-community/events/284463736/", - "location": "The LAB Miami, FL", - "date": "April 6th 2022", - "image": "event-meetup-miami@2x.jpg", - "end_date": "April 6, 2022", - }, - - { "name": "Hackathon:
New Year, New NFT", - "id": "upcoming-xrpl-hackathon-new-year", - "description": "Build Functional NFTs that span across a full range of use cases.", - "type": "hackathon", - "link": "https://xrplnft2022.devpost.com/", - "location": "Virtual", - "date": "January 31 - March 14, 2022", - "image": "Hackathons.png", - "end_date": "March 14, 2022", - }, - - - { "name": "Hackathon: Creating Real World Impact", - "description": "Build apps to improve lives in the real world using any of the SDKs and APIs for the XRP Ledger.", - "type": "hackathon", - "link": "https://xrplimpact.devpost.com/", - "location": "Virtual", - "date": "May 26 - Jul 11, 2022", - "image": "Hackathons.png", - "end_date" : "July 11, 2022", - }, - - { "name": "Conference:
Apex 2021", - "description": "View sessions from the Apex 2021 stages in Las Vegas and Tallinn.", - "type": "conference", - "link": "https://www.youtube.com/playlist?list=PLJQ55Tj1hIVZgnreb8ODgxJW032M9Z2XZ", - "location": "Las Vegas, Tallinn", - "date": "September 29-30, 2021", - "image": "Conference.png", - "end_date": "September 30, 2022", - }, - - { "name": "Hackathon:
NFT Launch Party", - "description": "Build Functional NFTs that span across a full range of use cases.", - "type": "hackathon", - "link": "https://xrplnft.devpost.com/", - "location": "Virtual", - "date": "Oct 31 - Dec 12, 2022", - "image": "Hackathons.png", - "end_date": "December 12, 2022", - }, - { "name": "XRPL Zone @ Consensus", - "description": "XRPL Zone: your all-in-one location for creating and collaborating on XRP Ledger (XRPL) projects.", - "type": "zone", - "link": "https://xrplzone-consensus.splashthat.com/", - "location": "Austin, Texas", - "date": "April 27, 2023", - "image": "XRPLZone.png", - "end_date": "April 27, 2023" - }, - { "name": "XRPL Developer AMAs", - "description": "A chat with Crossmark about wallet development on the XRP Ledger!", - "type": "ama", - "link": "https://discord.com/invite/xrpl", - "location": "XRPL Developers Discord", - "date": "April 14, 2023", - "image": "AMAs.png", - "end_date": "April 14, 2023" - }, - { "name": "NFTs with xrp.cafe", - "description": "A cozy discussion with xrp.cafe about NFTs and the future of NFT infrastructure on the XRP Ledger.", - "type": "ama", - "link": "https://dev.to/ripplexdev/xrpcafe-ama-on-xrpl-developers-discord-36gp", - "location": "XRPL Developers Discord", - "date": "January 1, 2023", - "image": "AMAs.png", - "end_date": "January 1, 2023" - }, - { "name": "Community Calls #1", - "description": "An open discussion about the development of XLS-20 and NFTs on the XRP Ledger.", - "type": "cc", - "link": "https://youtu.be/KpSt0PFT2QM", - "location": "XRPL Developers Discord", - "date": "June 02, 2022", - "image": "CommunityCalls.png", - "end_date": "June 02, 2022" - }, - { "name": "Community Calls #2", - "description": "A community call about XRPL amendments with Chris McKay.", - "type": "cc", - "link": "https://youtu.be/oNJ1Qqns2Gw", - "location": "XRPL Developers Discord", - "date": "August 8, 2022", - "image": "CommunityCalls.png", - "end_date": "August 8, 2022" - }, - { "name": "AMAs: POS and Crypto Payments with FriiPay", - "description": "A discussion with FriiPay about payment rails and POS integrations through the XRP Ledger", - "type": "ama", - "link": "https://dev.to/ripplexdev/xrpl-developer-ama-pos-and-crypto-payments-with-friipay-13hm", - "location": "XRPL Developers Discord", - "date": "February 15, 2023", - "image": "AMAs.png", - "end_date": "February 15, 2023" - }, - { "name": "AMAs: On-chain Data with Bithomp", - "description": "A discuss with Bithomp about data infrastructure and their NFT integrations in one of the most popular explorers on the XRP Ledger.", - "type": "ama", - "link": "https://dev.to/ripplexdev/xrpl-developer-ama-bithomp-4a8d", - "location": "XRPL Developers Discord", - "date": "March 15, 2023", - "image": "AMAs.png", - "end_date": "March 15, 2023" - }, + {# + Needs Link { - "name": "XRPL Community Meetup: Madrid", - "description": "Get together with other Madrid-based members of the XRP Ledger community to network and discuss all things XRPL.", - "type": "meetup", - "link": "https://www.meetup.com/xrp-ledger-espana-madrid-y-barcelona/events/292597878", - "location": "Madrid", - "date": "April 29, 2023", - "image": "Madrid.png", - "end_date": "April 29, 2023" - }, - { - "name": "APEX 2023: The XRPL Developer Summit", - "description": "Apex XRPL Developer Summit is the annual event where developers, contributors, and thought leaders come together to learn, build, share, network, and celebrate all things XRP Ledger.", + "name": "APEX: The XRPL Developer Summit", + "description": "Save the date!", "type": "conference", - "link": "http://apexdevsummit.com", + "link": "", "location": "Amsterdam", - "date": "September 6 - 8, 2023", + "date": "June 11 - 13, 2024", "image": "Conference.png", - "end_date": "September 8, 2023" + "end_date": "June 13, 2024" }, - { "name": "Community Calls #3", - "description": "An open chat with the XRP Ledger community about NFTs and the EVM sidechain testnet.", - "type": "cc", - "link": "https://discord.com/invite/xrpl", - "location": "XRPL Developers Discord", - "date": "March 30, 2023", - "image": "CommunityCalls.png", - "end_date": "March 30, 2023" - }, - { "name": "XRPL Roundtable: XRPL @ Consensus", - "description": "A roundtable chat with those who represented the XRP Ledger at Consensus 2023.", - "type": "ama", - "link": "https://twitter.com/RippleXDev", - "location": "Twitter Spaces", - "date": "June 24, 2023", - "image": "AMAs.png", - "end_date": "June 24, 2023" - }, - { "name": "XRPL Summer Hackathon", - "description": "The XRPL Hackathon is all about supporting innovative projects and getting developers from diverse backgrounds to explore creative ideas and transition from centralized systems to the exciting world of blockchain. Bring your innovative projects to life and get a chance to secure up to $10,000 in funding.", - "type": "hackathon", - "link": "https://dorahacks.io/hackathon/xrpl-hackathon", - "location": "Online", - "date": "June 5, 2023 - July 30, 2023", - "image": "Hackathons.png", - "end_date": "July 30, 2023" - }, - { "name": "AMAs: XRPL Developer AMAs", - "description": "A chat with Matt Mankins from Lorem Labs to discuss Kudos for Code and his recent XRPL Accelerator acceptance.", - "type": "ama", - "link": "http://xrpldevs.org/", - "location": "XRPL Developers Discord", - "date": "July 18, 2023", - "image": "AMAs.png", - "end_date": "July 18, 2023" - }, - { "name": "Q3 2023 Ripple XRP Meetup", - "description": "Join your fellow Ripple XRP Enthusiasts for a 90-minute discussion. Topics: XRP, Flare, XRPL, Ripple (Company), General Crypto QA.", - "type": "meetup", - "link": "https://www.meetup.com/ripple-xrp-community/events/292740612", - "location": "Online", - "date": "July 13, 2023", - "image": "Virtual-Event.png", - "end_date": "July 13, 2023" - }, - { "name": "XRPL Toronto Meetup", - "description": "Prepare for an evening of XRPL Toronto Meetup – a celebration of discovery and connection. Join enthusiasts, innovators, and developers for inspiring talks, conversations, and learning. All are welcome, from seasoned developers to curious newcomers.", - "type": "meetup", - "link": "https://www.meetup.com/xrpl-toronto-community-meetup/events/294766059", - "location": "Downtown Toronto", - "date": "August 14, 2023", - "image": "event-meetup-toronto@2x.jpg", - "end_date": "August 14, 2023" - }, - { "name": "XRPL London Meetup (Accelerator Edition)", - "description": "Join us for a Happy Hour hosted by the XRPL Accelerator Team! Connect with fellow start-ups in the blockchain space and gain insights into cutting-edge projects and founders.", - "type": "meetup", - "link": "https://lu.ma/xrplacceleratorhappyhour", - "location": "Central London", - "date": "September 04, 2023", - "image": "event-meetup-london.png", - "end_date": "September 04, 2023" - }, - { - "name": "XRPL Accelerator Demo Day", - "description": "​​Join us for our very first XRPL Accelerator Demo Day in London. Witness pitches from nine portfolio startups, engage in Q&A sessions, and network with founders and investors. ", - "type": "conference", - "link": "https://lu.ma/xrplaccelerator", - "location": "Central London and Online", - "date": "September 05, 2023", - "image": "Conference.png", - "end_date": "September 05, 2023" - }, - { "name": "XRPL Hackathon - Apex 2023", - "description": "Join the XRPL Hackathon - APEX 2023, a week before the XRP Ledger's annual developer conference. Explore the Future of Finance and Web3 tracks, collaborate, learn, and compete for 10K USD in prizes.", - "type": "hackathon", - "link": "https://lu.ma/4h3bqfw1", - "location": "Delft, Netherlands ", - "date": "August 30, 2023 - August 31, 2023", - "image": "Hackathons.png", - "end_date": "August 31, 2023" - }, - { "name": "XRPL Grants Info Session: Financial Inclusion Focused", - "description": "Join us for a live information session and Q&A on applying to XRPL Grants Wave 7. This session will provide a general overview of the XRPL Grants application for Wave 7, with a focus on Financial Inclusion projects.", - "type": "info-session", - "link": "https://ripple.zoom.us/webinar/register/WN_YdxeVY9_RJG5SVo-LSip6w#/registration", - "location": "Virtual - Zoom", - "date": "September 05, 2023", - "image": "InfoSessions.png", - "end_date": "September 05, 2023" - }, - { "name": "XRPL South Korea Meetup - XCCESS", - "description": "We are excited to introduce the XRP Ledger XCCESS - an exclusive meetup bringing together the brightest minds, innovators, and enthusiasts from South Korea's blockchain industry. Join us for an engaging experience during the Korea Blockchain Week.", - "type": "meetup", - "link": "https://lu.ma/xrplxccess", - "location": "South Korea - JBK Tower", - "date": "September 06, 2023", - "image": "SouthKoreaMeetup.png", - "end_date": "September 06, 2023" - }, - { "name": "XRPL Grants Info Session: Decentralized Exchange (DEX) Focused", - "description": "Join us for a live information session and Q&A on applying to XRPL Grants Wave 7. This session will provide a general overview of the XRPL Grants application for Wave 7, with a focus on Decentralized Exchange (DEX) projects.", - "type": "info-session", - "link": "https://ripple.zoom.us/webinar/register/WN_ITv-kDuCS3i6UOgBxBe7-A", - "location": "Virtual - Zoom", - "date": "September 06, 2023", - "image": "InfoSessions.png", - "end_date": "September 06, 2023" - }, -] -%} - + #} {# Available Types - conference, hackathon, ama, cc, zone, meetup, info-session #} - - {% set results = categorize_dates(events) %} + {# Moved all dates to filter in order to be able to share it in other components #} + {% set results = categorize_dates() %} {% set upcoming = results.upcoming %} {% set past = results.past %} diff --git a/template/page-uses.html.jinja b/template/page-uses.html.jinja index 2602526282..830b8ade65 100644 --- a/template/page-uses.html.jinja +++ b/template/page-uses.html.jinja @@ -49,6 +49,14 @@ "category_id": "custody", "category_name": _("Custody"), "link": "https://www.bitgo.com/", + }, + { + "id": "gatehub", + "title": _("Gatehub"), + "description": _("Gatehub XRP Ledger Markets is an explorer to track Gatehub's inssuances on the XRP Ledger."), + "category_id": "custody", + "category_name": _("Custody"), + "link": "https://gatehub.net/markets", }, { "id": "bithomp", @@ -74,14 +82,6 @@ "category_name": _("Carbon Markets/Sustainability"), "link": "https://www.carbonlandtrust.com/", }, - { - "id": "casino-coin", - "title": _("Casino Coin"), - "description": _("CasinoCoin (CSC) is a digital currency developed specifically for the regulated gaming industry."), - "category_id": "other", - "category_name": _("Other"), - "link": "https://casinocoin.im/", - }, { "id": "cryptum", "title": _("Cryptum"), @@ -96,7 +96,7 @@ "description": _("Evernode proposes a permissionless, flexible, scalable Layer 2 smart contract network built from the XRP Ledger."), "category_id": "developer_tooling", "category_name": _("Developer Tooling"), - "link": "https://evernode.wordpress.com/", + "link": "https://evernode.org/", }, { "id": "forte", @@ -170,6 +170,22 @@ "category_name": _("NFTs"), "link": "https://peerkat.io/", }, + { + "id": "Crossmark", + "title": _("Crossmark"), + "description": _("Crossmark is a browser extension wallet built for interacting with the XRP Ledger."), + "category_id": "wallet", + "category_name": _("Wallet"), + "link": "https://github.com/crossmarkio", + }, + { + "id": "Edge", + "title": _("Edge"), + "description": _("Edge is a secure, easy, and private way to use, store, trade, and exchange crypto assets. Edge ensures sure you’re always in control of your money and information while also providing the tools necessary to protect yourself from others and your own mistakes. Edge has rich functionality, a battle-tested security architecture, and the industry’s best customer support."), + "category_id": "wallet", + "category_name": "Wallet", + "link": "https://edge.app/ripple-wallet/", + }, { "id": "ripples-cbdc-platform", "title": _("Ripple's CBDC Platform"), @@ -217,6 +233,14 @@ "category_id": "developer_tooling", "category_name": _("Developer Tooling"), "link": "https://x-tokenize.com/", + }, + { + "id": "threezy", + "title": _("3ZY"), + "description": _("3ZY develops SaaS solutions that combine web2 and web3 technologies with marketing to enhance the user experience for newcomers in the market, making it easier for them to purchase, stay secure, and engage in trustless decentralized finance and transactions."), + "category_id": "developer_tooling", + "category_name": _("Developer Tooling"), + "link": "https://3zyconnect.com/", }, { "id": "xp-market", @@ -291,12 +315,9 @@ "gaming": _("Gaming"), "security": _("Security"), "payments": _("Payments"), - "web_monetization": _("Web Monetization"), "sustainability": _("Sustainability"), "cbdcs": _("CBDCs"), - "custody": _("Custody"), - "defi": _("DeFi"), - "other": _("Other"), + "custody": _("Custody") } %} @@ -345,86 +366,152 @@
-

{% trans %}Proven Powerful for Innovation{% endtrans %}

-
{% trans %}XRPL Use Cases{% endtrans %}
+

{% trans %}Powering Innovative Use Cases and Projects.{% endtrans %}

+
{% trans %}XRPL Ecosystem{% endtrans %}
-
+
-

{% trans %}Building businesses and creating new value{% endtrans %}

-
{% trans %}XRPL Ecosystem{% endtrans %}
+
+
+ Explore Featured Projects +
+

{% trans %}The XRPL has a rich ecosystem with many contributors globally. Explore the community of developers, validators, and partners.{% endtrans %}

+
{% trans %}Introducing the XRPL Ecosystem{% endtrans %}
+
+
+
+
Apps/exchanges
built on the
XRPL
+
-
    + +
      {% set uses = [ - {"id": "infrastructure", "title": _("Infrastructure"), - "description": _("Build and operate components or systems that help the functionality of the XRP Ledger, such as Nodes, dev tools, storage, security and more.")}, + "number": 7, + "description" : _("Build and operate components or systems that help the functionality of the XRP Ledger, such as Nodes, dev tools, storage, security and more.") + }, {"id": "developer_tooling", "title": _("Developer Tooling"), - "description": _("Developers can leverage open-source libraries, SDKs and more to help build their blockchain project and across essential XRP Ledger functionality.")}, - + "number": 4, + "description" : _("Developers can leverage open-source libraries, SDKs and more to help build their project and access essential XRP Ledger functionality.") + }, + {"id": "interoperability", + "title": _("Interoperability"), + "number": 1, + "description": _("Developers and node operators can build and run custom sidechains while leveraging the XRPL’s lean and efficient feature set.") + }, {"id": "wallet", "title": _("Wallet"), - "description": _("Build digital wallets to store passwords and interact with various blockchains to send and receive digital assets, including XRP.")}, - + "number": 4, + "description": _("Build digital wallets to store passwords and interact with various blockchains to send and receive digital assets, including XRP.") + }, {"id": "nfts", "title": _("NFTs"), - "description": _("XRPL supports the issuance of IOUs that represent a currency of any value, as well as non-fungible tokens (NFTs).")}, - + "number": 7, + "description": _("XRPL supports the issuance of IOUs that represent a currency of any value, as well as non-fungible tokens (NFTs).") + }, {"id": "exchanges", "title": _("Exchanges"), - "description": _("Build sophisticated exchanges where users can invest and trade crypto and assets such as stocks, ETFs, and commodities.")}, - + "number": 2, + "description": _("Build sophisticated exchanges where users can invest and trade crypto and assets such as stocks, ETFs, and commodities.") + }, {"id": "gaming", "title": _("Gaming"), - "description": _("The XRPL supports gaming at high speed given its reliable throughput, low fees, and sidechain interoperability.")}, - + "number": 2, + "description": _("The XRPL supports gaming at high speed given its reliable throughput, low fees, and sidechain interoperability.") + }, {"id": "security", "title": _("Security"), - "description": _("Build services and tools that help prevent and combat fraudulent activity with the XRPL.")}, + "number": 1, + "description": _("Build services and tools that help prevent and combat fraudulent activity with the XRPL.") + }, {"id": "payments", "title": _("Payments"), - "description": _("Leverage the efficiency and speed of the XRP Ledger to move value all over the globe.")}, - - {"id": "web_monetization", - "title": _("Web Monetization"), - "description": _("Support creators and their content directly leveraging the power of the XRP Ledger.")}, - - {"id": "sustainability", - "title": _("Sustainability"), - "description": _("Use the XRP Ledger to tokenize carbon offsets as non-fungible tokens (NFTs).")}, + "number": 2, + "description": _("Leverage the efficiency and speed of the XRP Ledger to move value all over the globe.") + }, {"id": "cbdc", "title": _("CBDC"), - "description": _("A private version of the XRP Ledger provides Central Banks a secure, controlled, and flexible solution to issue and manage Central Bank Issued Digital Currencies (CBDCs).")}, + "number": 1, + "description": "A private version of the XRP Ledger provides Central Banks a secure, controlled, and flexible solution to issue and manage Central Bank Issued Digital Currencies (CBDCs)." + }, + + {"id": "sustainability", + "title": _("Sustainability"), + "number": 1, + "description": _("Use the XRP Ledger to tokenize carbon offsets as non-fungible tokens (NFTs).") + }, {"id": "custody", "title": _("Custody"), - "description": _("Use the XRP Ledger to build crypto custody and securely hold, store and use your assets.")}, - - {"id": "defi", - "title": _("DeFi"), - "description": _("Provide access to financial products and services replacing the traditional role of financial institutions.")}, - + "number": 2, + "description": _("Use the XRP Ledger to build crypto custody and securely hold, store and use your assets.") + }, ] %} - {% for use in uses %} -
    • - {{use.title}} icon -

      {{use.title}}

      -

      {{use.description}}

      -
    • - {% endfor %} + {% for use in uses %} +
    • +
      + use-logos +

      {{use.title}}

      +
      + {{use.number}} +
      +
      +
    • +{% endfor %} +
+ + + +
+
+ Join the XRPL Ecosystem and showcase your XRPL project, application, or product. Get featured on the Developer Reflections blog or Ecosystem page. + +
+
+
@@ -491,7 +578,6 @@
- {% endblock %} {% block analytics %} @@ -506,6 +592,47 @@ {% endblock analytics %} + {% block endbody %} + + + + + + + {% endblock %} diff --git a/template/page-xrp-faucets.html.jinja b/template/page-xrp-faucets.html.jinja index be46b5da38..954651ca0e 100644 --- a/template/page-xrp-faucets.html.jinja +++ b/template/page-xrp-faucets.html.jinja @@ -24,6 +24,14 @@ "shortname": "AMM-Devnet", "faucet": "https://ammfaucet.devnet.rippletest.net/accounts", "desc": "XLS-30d Automated Market Makers preview network." + }, + { + "id": "faucet-select-xahau", + "ws_url": "wss://xahau-test.net/", + "jsonrpc_url": "https://xahau-test.net/", + "shortname": "Xahau-Testnet", + "faucet": "https://xahau-test.net/accounts", + "desc": "Hooks (L1 smart contracts) enabled Xahau testnet." } ] %} @@ -56,7 +64,6 @@ {% endfor %} -

Hooks Testnet: See the Hooks Faucet

diff --git a/tool/filter_categorize_dates.py b/tool/filter_categorize_dates.py index a38fd94797..52ac7a344e 100644 --- a/tool/filter_categorize_dates.py +++ b/tool/filter_categorize_dates.py @@ -1,11 +1,456 @@ from datetime import datetime +events = [ + { + "name": "Hackathon: 2021", + "description": "Explore the exciting project submissions from the fall 2021 XRPL Hackathon that focused on the NFT and Hooks smart contract functionalities on the ledger.", + "type": "hackathon", + "link": "https://xrpl-hackathon-2021.devpost.com/project-gallery", + "location": "Virtual", + "date": "September 13-October 6, 2021", + "image": "Hackathons.png", + "end_date": "October 6, 2021", + }, + { "name": "XRPL Community Meetup: San Diego", + "description": "The first official Meetup hosted by the XRPL Community. Community members in Southern California gathered around a firepit and shared their experiences with the XRPL.", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-community/events/281806645/", + "location": "San Diego, CA", + "date": "Saturday, November 20, 2021", + "image": "event-meetup-san-diego@2x.jpg", + "end_date": "November 20, 2021", + }, -def categorize_dates(arr): + { "name": "XRPL Community Meetup: Atlanta", + "description": "The inaugural Meetup in the Southeast region of the United States got community members excited to meet like-minded individuals in their area.", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-community/events/281980446/", + "location": "Atlanta, GA", + "date": "Saturday, November 27, 2021", + "image": "event-meetup-alanta@2x.jpg", + "end_date": "November 27, 2021", + }, + { "name": "XRPL Community Meetup: San Francisco", + "description": "Community members in the Bay Area with diverse backgrounds in technology and beyond met in downtown San Francisco.", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-community/events/281806676/", + "location": "San Francisco, CA", + "date": "Monday, November 29, 2021", + "image": "event-meetup-san-francisco@2x.jpg", + "end_date": "November 29, 2021", + }, + + { "name": "XRPL Community Meetup: Miami", + "description": "One of the biggest Meetups held so far, this was the first of an ongoing series of local XRPL Community Meetup events in Miami. ", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-community/events/281829463/", + "location": "Miami, FL ", + "date": "Thursday, December 9, 2021", + "image": "event-meetup-miami@2x.jpg", + "end_date": "December 8, 2022", + }, + + { "name": "XRPL Community Meetup: Nashville", + "description": "Nashville-based members of the XRPL Community came together to network, learn, share ideas, and form new partnerships. ", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-nashville-community/events/282538189/", + "location": "Nashville, TN", + "date": "Saturday, December 18, 2021", + "image": "event-meetup-nashville@2x.jpg", + "end_date": "December 18, 2022", + }, + + + { "name": "NYC Meetup/Hackathon XRPL Celebration", + "id": "upcoming-xrpl-new-york", + "description": "The NYC/XRP community and Dev Null Productions cordially invites you to attend our 10th meetup, being held in celebration of the on-going XRPL Hackathon, at the unique and artistic TALS studio in Midtown Manhattan.", + "type": "meetup", + "link": "https://www.meetup.com/NYC-XRP/events/284485901/", + "location": "NYC, NY", + "date": "March 30, 2022", + "image": "event-meetup-new-york@2x.jpg", + "end_date": "March 30, 2022", + }, + + { "name": "XRPL Community Meetup: London", + "id": "upcoming-xrpl-london", + "description": "Join for an evening of programming and networking with members of the XRPL Community in London, co-organised by Peerkat - the NFT platform for creators on the XRPL.", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-london-community/events/283536458/", + "location": "IDEALondon", + "date": "March 31, 2022", + "image": "event-meetup-london.png", + "end_date": "March 31, 2022", + }, + + { "name": "XRPL Community Meetup: Toronto", + "id": "upcoming-xrpl-toronto", + "description": "Join us for our first Toronto meetup with an evening of programming and networking with other members of the XRP Ledger Community with special guests from the XUMM Wallet and ARK PLATES teams!", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-toronto-community-meetup/events/284177188/", + "location": "Toronto", + "date": "March 31, 2022", + "image": "event-meetup-toronto@2x.jpg", + "end_date": "March 31, 2022", + }, + + { "name": "XRPL Community Meetup: San Diego", + "id": "upcoming-xrpl-san-diego", + "description": "Get together with other San Diego-based members of the XRP Ledger Community to network and discuss all things XRPL! Join us for our second San Diego XRPL Meetup.", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-san-diego-community/events/284663355/", + "location": "San Diego, CA", + "date": "April 1st 2022", + "image": "event-meetup-san-diego@2x.jpg", + "end_date": "April 1, 2022", + }, + + { "name": "XRPL Community Meetup: Irvine LA", + "id": "upcoming-xrpl-irvine", + "description": "Get together with other LA-based members of the XRP Ledger Community to network and discuss all things XRPL.", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-la-community-meetup/events/284824635/", + "location": "UC Irvine, CA", + "date": "April 3rd 2022", + "image": "event-meetup-irvine@2x.jpg", + "end_date": "April 2, 2022", + }, + + { "name": "XRPL Community Meetup: Miami #2", + "id": "upcoming-xrpl-miami-2", + "description": "We're excited to host our second Miami meetup for XRP Ledger community members on April 6th from 6-8pm, featuring Marco Neri, Developer Advocate at Ripple, who will join us to give a presentation on the XRP Ledger.", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-miami-community/events/284463736/", + "location": "The LAB Miami, FL", + "date": "April 6th 2022", + "image": "event-meetup-miami@2x.jpg", + "end_date": "April 6, 2022", + }, + + { "name": "Hackathon:
New Year, New NFT", + "id": "upcoming-xrpl-hackathon-new-year", + "description": "Build Functional NFTs that span across a full range of use cases.", + "type": "hackathon", + "link": "https://xrplnft2022.devpost.com/", + "location": "Virtual", + "date": "January 31 - March 14, 2022", + "image": "Hackathons.png", + "end_date": "March 14, 2022", + }, + + + { "name": "Hackathon: Creating Real World Impact", + "description": "Build apps to improve lives in the real world using any of the SDKs and APIs for the XRP Ledger.", + "type": "hackathon", + "link": "https://xrplimpact.devpost.com/", + "location": "Virtual", + "date": "May 26 - Jul 11, 2022", + "image": "Hackathons.png", + "end_date" : "July 11, 2022", + }, + + { "name": "Conference:
Apex 2021", + "description": "View sessions from the Apex 2021 stages in Las Vegas and Tallinn.", + "type": "conference", + "link": "https://www.youtube.com/playlist?list=PLJQ55Tj1hIVZgnreb8ODgxJW032M9Z2XZ", + "location": "Las Vegas, Tallinn", + "date": "September 29-30, 2021", + "image": "Conference.png", + "end_date": "September 30, 2022", + }, + + { "name": "Hackathon:
NFT Launch Party", + "description": "Build Functional NFTs that span across a full range of use cases.", + "type": "hackathon", + "link": "https://xrplnft.devpost.com/", + "location": "Virtual", + "date": "Oct 31 - Dec 12, 2022", + "image": "Hackathons.png", + "end_date": "December 12, 2022", + }, + { "name": "XRPL Zone @ Consensus", + "description": "XRPL Zone: your all-in-one location for creating and collaborating on XRP Ledger (XRPL) projects.", + "type": "zone", + "link": "https://xrplzone-consensus.splashthat.com/", + "location": "Austin, Texas", + "date": "April 27, 2023", + "image": "XRPLZone.png", + "end_date": "April 27, 2023" + }, + { "name": "XRPL Developer AMAs", + "description": "A chat with Crossmark about wallet development on the XRP Ledger!", + "type": "ama", + "link": "https://discord.com/invite/xrpl", + "location": "XRPL Developers Discord", + "date": "April 14, 2023", + "image": "AMAs.png", + "end_date": "April 14, 2023" + }, + { "name": "NFTs with xrp.cafe", + "description": "A cozy discussion with xrp.cafe about NFTs and the future of NFT infrastructure on the XRP Ledger.", + "type": "ama", + "link": "https://dev.to/ripplexdev/xrpcafe-ama-on-xrpl-developers-discord-36gp", + "location": "XRPL Developers Discord", + "date": "January 1, 2023", + "image": "AMAs.png", + "end_date": "January 1, 2023" + }, + { "name": "Community Calls #1", + "description": "An open discussion about the development of XLS-20 and NFTs on the XRP Ledger.", + "type": "cc", + "link": "https://youtu.be/KpSt0PFT2QM", + "location": "XRPL Developers Discord", + "date": "June 02, 2022", + "image": "CommunityCalls.png", + "end_date": "June 02, 2022" + }, + { "name": "Community Calls #2", + "description": "A community call about XRPL amendments with Chris McKay.", + "type": "cc", + "link": "https://youtu.be/oNJ1Qqns2Gw", + "location": "XRPL Developers Discord", + "date": "August 8, 2022", + "image": "CommunityCalls.png", + "end_date": "August 8, 2022" + }, + { "name": "AMAs: POS and Crypto Payments with FriiPay", + "description": "A discussion with FriiPay about payment rails and POS integrations through the XRP Ledger", + "type": "ama", + "link": "https://dev.to/ripplexdev/xrpl-developer-ama-pos-and-crypto-payments-with-friipay-13hm", + "location": "XRPL Developers Discord", + "date": "February 15, 2023", + "image": "AMAs.png", + "end_date": "February 15, 2023" + }, + { "name": "AMAs: On-chain Data with Bithomp", + "description": "A discuss with Bithomp about data infrastructure and their NFT integrations in one of the most popular explorers on the XRP Ledger.", + "type": "ama", + "link": "https://dev.to/ripplexdev/xrpl-developer-ama-bithomp-4a8d", + "location": "XRPL Developers Discord", + "date": "March 15, 2023", + "image": "AMAs.png", + "end_date": "March 15, 2023" + }, + { + "name": "XRPL Community Meetup: Madrid", + "description": "Get together with other Madrid-based members of the XRP Ledger community to network and discuss all things XRPL.", + "type": "meetup", + "link": "https://www.meetup.com/xrp-ledger-espana-madrid-y-barcelona/events/292597878", + "location": "Madrid", + "date": "April 29, 2023", + "image": "Madrid.png", + "end_date": "April 29, 2023" + }, + { + "name": "APEX 2023: The XRPL Developer Summit", + "description": "Apex XRPL Developer Summit is the annual event where developers, contributors, and thought leaders come together to learn, build, share, network, and celebrate all things XRP Ledger.", + "type": "conference", + "link": "http://apexdevsummit.com", + "location": "Amsterdam", + "date": "September 6 - 8, 2023", + "image": "Conference.png", + "end_date": "September 8, 2023" + }, + { "name": "Community Calls #3", + "description": "An open chat with the XRP Ledger community about NFTs and the EVM sidechain testnet.", + "type": "cc", + "link": "https://discord.com/invite/xrpl", + "location": "XRPL Developers Discord", + "date": "March 30, 2023", + "image": "CommunityCalls.png", + "end_date": "March 30, 2023" + }, + { "name": "XRPL Roundtable: XRPL @ Consensus", + "description": "A roundtable chat with those who represented the XRP Ledger at Consensus 2023.", + "type": "ama", + "link": "https://twitter.com/RippleXDev", + "location": "Twitter Spaces", + "date": "June 24, 2023", + "image": "AMAs.png", + "end_date": "June 24, 2023" + }, + { "name": "XRPL BUIDLERS BOOTCAMP", + "description": "First XRPL Ideathon in Japan Held Ahead of Crypto Event IVS Crypto.", + "type": "hackathon", + "link": "https://lu.ma/xrpl_builders_bootcamp", + "location": "Tokyo", + "date": "June 25, 2023", + "image": "Hackathons.png", + "end_date": "June 25, 2023" + }, + { "name": "XRPL Workshop at WebX Asia", + "description": "Workshop with XRP Ledger co-developer David Schwartz and leading Japanese XRPL developers.", + "type": "conference", + "link": "https://lu.ma/mn90h3h9", + "location": "Tokyo", + "date": "July 26, 2023", + "image": "Conference.png", + "end_date": "July 26, 2023" + }, + { "name": "XRPL Summer Hackathon", + "description": "The XRPL Hackathon is all about supporting innovative projects and getting developers from diverse backgrounds to explore creative ideas and transition from centralized systems to the exciting world of blockchain. Bring your innovative projects to life and get a chance to secure up to $10,000 in funding.", + "type": "hackathon", + "link": "https://dorahacks.io/hackathon/xrpl-hackathon", + "location": "Online", + "date": "June 5, 2023 - July 30, 2023", + "image": "Hackathons.png", + "end_date": "July 30, 2023" + }, + { "name": "AMAs: XRPL Developer AMAs", + "description": "A chat with Matt Mankins from Lorem Labs to discuss Kudos for Code and his recent XRPL Accelerator acceptance.", + "type": "ama", + "link": "http://xrpldevs.org/", + "location": "XRPL Developers Discord", + "date": "July 18, 2023", + "image": "AMAs.png", + "end_date": "July 18, 2023" + }, + { "name": "Q3 2023 Ripple XRP Meetup", + "description": "Join your fellow Ripple XRP Enthusiasts for a 90-minute discussion. Topics: XRP, Flare, XRPL, Ripple (Company), General Crypto QA.", + "type": "meetup", + "link": "https://www.meetup.com/ripple-xrp-community/events/292740612", + "location": "Online", + "date": "July 13, 2023", + "image": "Virtual-Event.png", + "end_date": "July 13, 2023" + }, + { "name": "XRPL Toronto Meetup", + "description": "Prepare for an evening of XRPL Toronto Meetup – a celebration of discovery and connection. Join enthusiasts, innovators, and developers for inspiring talks, conversations, and learning. All are welcome, from seasoned developers to curious newcomers.", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-toronto-community-meetup/events/294766059", + "location": "Downtown Toronto", + "date": "August 14, 2023", + "image": "event-meetup-toronto@2x.jpg", + "end_date": "August 14, 2023" + }, + { "name": "XRPL London Meetup (Accelerator Edition)", + "description": "Join us for a Happy Hour hosted by the XRPL Accelerator Team! Connect with fellow start-ups in the blockchain space and gain insights into cutting-edge projects and founders.", + "type": "meetup", + "link": "https://lu.ma/xrplacceleratorhappyhour", + "location": "Central London", + "date": "September 04, 2023", + "image": "event-meetup-london.png", + "end_date": "September 04, 2023" + }, + { + "name": "XRPL Accelerator Demo Day", + "description": "​​Join us for our very first XRPL Accelerator Demo Day in London. Witness pitches from nine portfolio startups, engage in Q&A sessions, and network with founders and investors. ", + "type": "conference", + "link": "https://lu.ma/xrplaccelerator", + "location": "Central London and Online", + "date": "September 05, 2023", + "image": "Conference.png", + "end_date": "September 05, 2023" + }, + { "name": "XRPL Hackathon - Apex 2023", + "description": "Join the XRPL Hackathon - APEX 2023, a week before the XRP Ledger's annual developer conference. Explore the Future of Finance and Web3 tracks, collaborate, learn, and compete for 10K USD in prizes.", + "type": "hackathon", + "link": "https://lu.ma/4h3bqfw1", + "location": "Delft, Netherlands ", + "date": "August 30, 2023 - August 31, 2023", + "image": "Hackathons.png", + "end_date": "August 31, 2023" + }, + { "name": "XRPL Grants Info Session: Financial Inclusion Focused", + "description": "Join us for a live information session and Q&A on applying to XRPL Grants Wave 7. This session will provide a general overview of the XRPL Grants application for Wave 7, with a focus on Financial Inclusion projects.", + "type": "info-session", + "link": "https://www.youtube.com/watch?v=TgLaAXTZY7Q", + "location": "Virtual - Zoom", + "date": "September 05, 2023", + "image": "InfoSessions.png", + "end_date": "September 05, 2023" + }, + { "name": "XRPL South Korea Meetup - XCCESS", + "description": "We are excited to introduce the XRP Ledger XCCESS - an exclusive meetup bringing together the brightest minds, innovators, and enthusiasts from South Korea's blockchain industry. Join us for an engaging experience during the Korea Blockchain Week.", + "type": "meetup", + "link": "https://lu.ma/xrplxccess", + "location": "South Korea - JBK Tower", + "date": "September 06, 2023", + "image": "SouthKoreaMeetup.png", + "end_date": "September 06, 2023" + }, + { "name": "XRPL Grants Info Session: Decentralized Exchange (DEX) Focused", + "description": "Watch the recorded information session and Q&A on applying to XRPL Grants Wave 7. This session will provide a general overview of the XRPL Grants application for Wave 7, with a focus on Decentralized Exchange (DEX) projects.", + "type": "info-session", + "link": "https://www.youtube.com/watch?v=BbGu0QC5WEE", + "location": "Virtual - Zoom", + "date": "September 06, 2023", + "image": "InfoSessions.png", + "end_date": "September 06, 2023" + }, + { "name": "XRPL Developers Discord AMA: Edge Wallet", + "description": "Join us for a live chat on Discord and learn more about Edge Wallet and how they are building on the XRP Ledger.", + "type": "ama", + "link": "http://xrpldevs.org/", + "location": "XRPL Developers Discord", + "date": "October 13, 2023", + "image": "AMAs.png", + "end_date": "October 13, 2023" + }, + + { "name": "XRPL Developers Reddit AMA: Real World Assets", + "description": "Join us for a live chat on Reddit and learn more about how developers are building real world assets with confidence on the XRP Ledger.", + "type": "ama", + "link": "https://xrplresources.org/rwa-ama?utm_source=web&utm_medium=web&utm_campaign=bwc", + "location": "Virtual - Reddit", + "date": "October 17, 2023", + "image": "AMAs.png", + "end_date": "October 17, 2023" + }, + + { "name": "XRPL Blockhack Hackathon", + "description": "Join us at George Brown College's Waterfront Campus for workshops and talks on promoting growth for blockchain projects and ventures. We are supporting a for the most innovative application built on XRPL.", + "type": "hackathon", + "link": "https://blockhack-2023.devpost.com/", + "location": "George Brown College - Waterfront Campus", + "date": "October 20, 2023 - October 22, 2023", + "image": "Hackathons.png", + "end_date": "October 22, 2023" + }, + { "name": "XRPL Accelerator Demo Day", + "description": "Join us for XRPL Accelerator Demo Day in Singapore! Explore pitches from 11 promising startups building on the XRP Ledger, network with founders and investors, and kickstart the Singapore FinTech Festival. Webinar link coming soon!", + "type": "meetup", + "link": "https://www.eventbrite.co.uk/e/xrpl-demo-day-tickets-740650023157?aff=oddtdtcreator", + "location": "Hybrid Singapore/Virtual Webinar", + "date": "November 14, 2023", + "image": "singapore.png", + "end_date": "November 14, 2023" + }, + { "name": "New Horizon: Innovate Without Limits: New Horizons Await", + "description": "Join our EVM-compatible chain launch for a chance to win $50,000 in prizes! Unleash your creativity in DeFi and NFTs, with judging criteria focused on novelty, impact, and community engagement.", + "type": "hackathon", + "link": "https://newhorizon.devpost.com/", + "location": "Virtual", + "date": "October 19, 2023 - December 22, 2023", + "image": "Hackathons.png", + "end_date": "December 22, 2023" + }, + { + "name": "XRPL Community Report Launch Party", + "description": "Celebrate the XRPL Community Report launch at 7pm! Join blockchain enthusiasts, connect with experts, and discover opportunities in the XRP Ledger ecosystem. Limited space available, so register now for a night of celebration and networking!", + "type": "meetup", + "link": "https://www.eventbrite.fr/e/billets-xrpl-community-report-launch-party-753788370307", + "location": "Paris, France", + "date": "November 28, 7pm - 9pm", + "image": "paris.png", + "end_date": "November 28, 2023" + }, + { + "name": "XRPL Toronto Meetup Community - Celebrate with Us!", + "description": "To connect the blockchain community, showcase campus ambassador projects, and celebrate the year's progress with a holiday theme.", + "type": "meetup", + "link": "https://www.meetup.com/xrpl-toronto-community-meetup/events/294766059", + "location": "Downtown, Toronto", + "date": "December 7th, 6pm - 9pm", + "image": "event-meetup-toronto@2x.jpg", + "end_date": "December 7, 2023" + }, + +] +def categorize_dates(): past = [] upcoming = [] today = datetime.today() - - for obj in arr: + for obj in events: end_date = datetime.strptime(obj['end_date'], '%B %d, %Y') if end_date < today: obj['type'] = obj['type'] + '-past' @@ -13,7 +458,7 @@ def categorize_dates(arr): else: obj['type'] = obj['type'] + '-upcoming' upcoming.append(obj) - return {'past': past, 'upcoming': upcoming} + return {'past': past, 'upcoming': upcoming, 'all' : all} export = { "categorize_dates": categorize_dates, diff --git a/tool/filter_enforce_filenames.py b/tool/filter_enforce_filenames.py index 5c831c8853..3d2fcaa76e 100644 --- a/tool/filter_enforce_filenames.py +++ b/tool/filter_enforce_filenames.py @@ -27,12 +27,14 @@ def idify(utext): utext = re.sub(r'[\s-]+', '-', utext) return utext -def normalized_match(filename, heading, loose=False): +def normalized_match(filename, heading, loose=False, exclude_index=True): """ Return True if the normalized versions of a filename and a heading match, False otherwise. If loose==True, allow some leeway like omitting 'and' and 'the' """ + if exclude_index and filename == "index.md": + return True if filename[-3:] == ".md": filename = filename[:-3] @@ -68,24 +70,32 @@ def compare_nav_and_fs_hierarchy(page, pages, logger): crumbs = get_hierarchy(page, pages, logger) crumbs = [idify(c["name"]) for c in crumbs] #TODO: either fix the protocol reference thing or generalize the magic string into an "allowed aliases" feature - crumbs = [("protocol-reference" if c == "xrp-ledger-protocol-reference" else c) for c in crumbs] + #crumbs = [("protocol-reference" if c == "xrp-ledger-protocol-reference" else c) for c in crumbs] expected_path = "/".join(crumbs) + ".md" actual_path = page["md"] + pretty_url = "/" + "/".join(crumbs) if expected_path != actual_path: path_parts = actual_path.split("/") - if len(path_parts) >=2 and path_parts[-2]+".md" == path_parts[-1]: - expected_path2 = "/".join(crumbs+[crumbs[-1]]) + ".md" + if len(path_parts) >= 1 and path_parts[-1] == "index.md": + expected_path2 = "/".join(crumbs+["index"]) + ".md" if actual_path == expected_path2: - logger.debug("Mismatched path {actual_path} is OK (follows 'topic/topic.md' convention)".format(actual_path=actual_path)) + logger.debug("Topic index is fine at {actual_path}") return + # elif len(path_parts) >=2 and path_parts[-2]+".md" == path_parts[-1]: + # expected_path2 = "/".join(crumbs+[crumbs[-1]]) + ".md" + # if actual_path == expected_path2: + # logger.debug("Mismatched path {actual_path} is OK (follows 'topic/topic.md' convention)".format(actual_path=actual_path)) + # return - # Switch to the commented out print statement to get + # Switch to the commented out print statement(s) to get # tab-separated values you can paste into a spreadsheet: - # print(expected_path, "\t", actual_path) + + #print(pretty_url, "\t", expected_path, "\t", actual_path) logger.warning("""File path doesn't match the recommendation based on navigation. Expected: {expected_path} Actual: {actual_path}""".format(expected_path=expected_path, actual_path=actual_path)) + #print("/"+page["html"], "\t", pretty_url) def filter_soup(soup, currentpage={}, config={}, pages=[], logger=None, **kwargs): @@ -112,5 +122,5 @@ def filter_soup(soup, currentpage={}, config={}, pages=[], logger=None, **kwargs return # TODO: allow configuration of loose/strict matching - if not normalized_match(page_filename, page_h1, loose=True): + if not normalized_match(page_filename, page_h1, loose=False): logger.warning("Filename/Title Mismatch: '{page_filename}' vs '{page_h1}'".format(page_filename=page_filename, page_h1=page_h1)) diff --git a/tool/filter_make_indexes.py b/tool/filter_make_indexes.py new file mode 100644 index 0000000000..8303f9821f --- /dev/null +++ b/tool/filter_make_indexes.py @@ -0,0 +1,102 @@ +## Tool for one-time creation of index.md files for dactyl-config entries that +## represent auto-generated index pages. + +import sys +import re +import ruamel.yaml +import os, os.path +yaml = ruamel.yaml.YAML() + +with open("dactyl-config.yml") as f: + raw_config = yaml.load(f) + +BASE_DIRS = ["content", "@i18n", "ja"] + +class DumpString: + def __init__(self, s=""): + self.s = s + def write(self, something): + if type(something) == bytes: + something = something.decode() + self.s += something + def __repr__(self): + return self.s + +def raw_config_for(page, target): + for raw_page in raw_config["pages"]: + if raw_page.get("html", "") == page["html"] and target in raw_page.get("targets", []): + return raw_page + +# def get_hierarchy(page, pages, logger, top_page): +# crumbs = [page] +# while crumbs[0] != top_page: +# for p in pages: +# if p["html"] == crumbs[0]["parent"]: +# crumbs.insert(0, p) +# break +# else: +# logger.warning("Couldn't find parent '%s' of %s"%(page["parent"], page["html"])) +# break +# return crumbs[1:] + +def idify(utext): + utext = re.sub(r'[^\w\s-]', '', utext).strip().lower() + utext = re.sub(r'[\s-]+', '-', utext) + return utext + +def index_path_for(ja_page, pages): + for page in pages: + if page["html"] == ja_page["html"] and "en" in page["targets"]: + return page["md"] # might throw an error, we'll find out + +def filter_soup(soup, currentpage={}, config={}, pages=[], logger=None, **kwargs): + # for p in pages: + # if p["html"] == "docs.html": + # top_page = p + # break + # else: + # exit("Couldn't find docs top") + top_page = pages[0] + + for page in pages: + t = page.get("template", "") + if t != "pagetype-category.html.jinja" or page.get("md", ""): + continue + #crumbs = get_hierarchy(page, pages, logger, top_page)[1:] + #crumb_slugs = BASE_DIRS + [idify(c["name"]) for c in crumbs] + ["index.md"] + #index_path = "/".join(crumb_slugs) + + index_path = os.path.join(*BASE_DIRS, index_path_for(page, config["pages"])) + #print(index_path) + simple_entry = {"md": index_path} + + page_props = raw_config_for(page, "ja") + #print("page_props:", page_props) + + simple_entry["targets"] = page_props["targets"] + del page_props["targets"] + + title = page_props["name"] + del page_props["name"] + + if "blurb" in page_props: + blurb = page_props["blurb"] + del page_props["blurb"] + else: + blurb = "" + + se_str = DumpString() + yaml.dump(simple_entry, se_str) + print(se_str) + + fcontents = DumpString("---\n") + frontmatter = yaml.dump(page_props, fcontents) + fcontents = str(fcontents) + "---\n# " + title + "\n" + blurb + + # os.makedirs(os.path.split(index_path)[0], exist_ok=True) + # with open(index_path, "w") as f: + # f.write(str(fcontents)) + #print(fcontents) + #print("\n\n\n") + + exit()